我已将推文保存在JSON文本文件中。我有一位朋友想要包含关键字的推文,并且推文需要以.csv格式保存。找到推文很容易,但我遇到了两个问题,并正在努力寻找一个好的解决方案。将推文保存为.csv,包含字符串文字和实体
样本数据为here。我已经包含了不工作的.csv文件以及每行都是JSON格式的推文的文件。
为了进入数据框,我使用了pd.io.json.json_normalize
。它工作顺利,处理嵌套字典,但pd.to_csv
不起作用,因为它不处理,据我所知,字符串文字很好。其中一些推文在text
字段中包含'\n'
,pandas
在发生时写入新行。
没问题,我处理pd['text']
以删除'\n'
。由此产生的文件仍然有太多的行,1863年应该是1388。然后我修改代码来替换所有字符串字面量:
tweets['text'] = [item.replace('\n', '') for item in tweets['text']]
tweets['text'] = [item.replace('\r', '') for item in tweets['text']]
tweets['text'] = [item.replace('\\', '') for item in tweets['text']]
tweets['text'] = [item.replace('\'', '') for item in tweets['text']]
tweets['text'] = [item.replace('\"', '') for item in tweets['text']]
tweets['text'] = [item.replace('\a', '') for item in tweets['text']]
tweets['text'] = [item.replace('\b', '') for item in tweets['text']]
tweets['text'] = [item.replace('\f', '') for item in tweets['text']]
tweets['text'] = [item.replace('\t', '') for item in tweets['text']]
tweets['text'] = [item.replace('\v', '') for item in tweets['text']]
同样的结果,pd.to_csv
节省了比实际更多的鸣叫行的文件。我可以在所有列中替换字符串文字,但这很笨拙。
很好,不要用pandas
。 with open(outpath, 'w') as f:
等等创建一个正确的行数的.csv文件。但是,使用pd.read_csv
读取文件或者逐行读取将会失败。
由于Twitter如何处理entities而失败。如果推文的文本包含网址,提及,标签,媒体或链接,则Twitter会返回包含逗号的字典。当pandas
扁平化推文时,逗号会保存在一列中,这很好。但是,当读入数据时,熊猫将应该将一列分成多列。例如,一列可能看起来像[{'screen_name': 'ProfOsinbajo','name': 'Prof Yemi Osinbajo','id': 2914442873,'id_str': '2914442873', 'indices': [0,' 13]}]'
,等逗号分割造成太多的列:
[{'screen_name': 'ProfOsinbajo',
'name': 'Prof Yemi Osinbajo',
'id': 2914442873",
'id_str': '2914442873'",
'indices': [0,
13]}]
这是我的结果是否使用with open(outpath) as f:
为好。用这种方法,我必须分割线,所以我分开逗号。同样的问题 - 如果它们出现在列表中,我不想在逗号分割。
我希望这些数据在保存到文件或从文件读取时作为一列处理。我错过了什么?根据the repository above的数据,我想将forstackoverflow2.txt
转换为一个.csv,其行数与推文数量相同。调用这个文件A.csv
,假设它有100列。打开时,A.csv
也应该有100列。
我确定有些细节我遗漏了,所以请让我知道。
csv模块会引用字段并转义字段中的引号字符,因此您不必预先处理JSON或使用制表符分隔的字段,因为逗号将位于带引号的字段中。 –
这就是我的想法,但我无法找出任何更好的理由,我无法让我的代码工作。也许它是在移动字面字符串。另外,我没有尝试'''csv''',所以也许我应该有。我为没有使用Python的朋友这样做,所以我想避免这种解决方案。 – ZacharyST