我已將推文保存在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