我在这种格式的文本文件中有数据。
我想把它读作pandas dataframe
。它看起来应该是这样的
这里有一个文本示例的原始数据https://snap.stanford.edu/data/web-FineFoods.html
我试过df = pd.read_csv('/Users/aaronbroderick/Desktop/finefoods_text.txt', delimiter = '\t', encoding = 'latin_1')
。
我已经下载了你提到的文件,并且可以使用以下代码将其读取到带有568455条记录和13列的DataFrame:
import pandas as pd
with open('finefoods.txt','r', encoding='latin-1') as f:
data = f.read()
df=pd.DataFrame([
{line.split(': ')[0]:': '.join(line.split(': ')[1:])
for line in record.split('\n')}
for record in data.split('\n\n')])
据我所知,这种格式的熊猫中没有内置的读者。
更新:清理和验证如此庞大的数据集确实需要一些努力和创造性的方法。例如。这个记录是额外不需要的列的来源之一:
product/productId: B002RIZUQ2
review/userId: AS2DLXUWDK0GP
review/profileName: MABEL "Tell us about yourself!
88 years old. ...
review/helpfulness: 1/1
review/score: 4.0
review/time: 1289088000
review/summary: delicious
导致引入名称为“88岁......”的“假”栏目。
如果可以忽略这些格式错误的记录,您可以按如下方式修改代码。
import pandas as pd
with open('finefoods.txt','r', encoding='latin-1') as f:
data = f.read()
columns_list=['product/productId',
'review/helpfulness',
'review/profileName',
'review/score',
'review/summary',
'review/text',
'review/time',
'review/userId']
df=pd.DataFrame([
{line.split(': ')[0]:': '.join(line.split(': ')[1:])
for line in record.split('\n') if line.split(': ')[0] in columns_list}
for record in data.split('\n\n')])
现在它是8列,仍然是568455条记录。