亚马逊精美食品:将文本文件转换为pandas DataFrame

问题描述 投票:0回答:1

我在这种格式的文本文件中有数据。

Text File Screen Shot

我想把它读作pandas dataframe。它看起来应该是这样的

Example Data Frame

这里有一个文本示例的原始数据https://snap.stanford.edu/data/web-FineFoods.html

我试过df = pd.read_csv('/Users/aaronbroderick/Desktop/finefoods_text.txt', delimiter = '\t', encoding = 'latin_1')

python pandas
1个回答
0
投票

我已经下载了你提到的文件,并且可以使用以下代码将其读取到带有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条记录。

© www.soinside.com 2019 - 2024. All rights reserved.