【发布时间】:2018-08-08 00:26:00
【问题描述】:
我正在使用 pandas 从 CSV 文件中读取我的数据,它适用于范围 700。但是一旦我超过 700 并尝试附加到 python 中的列表,它就会显示列表索引超出范围。但是 CSV 有大约 500K 行 谁能帮我解决为什么会这样? 提前致谢。
import pandas as pd
df_email = pd.read_csv('emails.csv',nrows=800)
test_email = df_email.iloc[:,-1]
list_of_emails = []
for i in range(len(test_email)):
var_email = test_email[i].split("\n") #this code takes one single email splits based on a new line giving a python list of all the strings in the email
email = {}
message_body = ''
for _ in var_email:
if ":" in _:
var_sentence = _.split(":") #this part actually uses the ":" to find the elements in the list that have ":" present
for j in range(len(var_sentence)):
if var_sentence[j].lower().strip() == "from":
email['from'] = var_sentence[var_sentence.index(var_sentence[j+1])].lower().strip()
elif var_sentence[j].lower().strip() == "to":
email['to'] = var_sentence[var_sentence.index(var_sentence[j+1])].lower().strip()
elif var_sentence[j].lower().strip() == 'subject':
if var_sentence[var_sentence.index(var_sentence[j+1])].lower().strip() == 're':
email['subject'] = var_sentence[var_sentence.index(var_sentence[j+2])].lower().strip()
else:
email['subject'] = var_sentence[var_sentence.index(var_sentence[j+1])].lower().strip()
elif ":" not in _:
message_body += _.strip()
email['body'] = message_body
list_of_emails.append(email)
【问题讨论】:
-
如果您向我们展示我们可能会帮助您的代码
-
如果可能的话,如果您分享您遇到错误的代码和文件,这将很容易回答。
-
"试图在 python 中追加到一个列表":如果你有 Pandas 可用,不要这样做。 Pandas 有一个你应该使用的
read_csv函数。 -
请使用代码块完整格式化相关代码;更容易阅读。
-
是的,我正在从 panda 中执行 read_csv 方法,并使用 nrows 参数来提及我想从 csv 中提取多少。在那里,如果我使用 nrows=700 ,然后当我尝试从列表中创建一个新的数据框时,我通过数据操作附加了行,它工作正常,但是一旦我设置 nrows=800 甚至 701 它就不起作用并附加到列表中说列表索引超出范围
标签: python csv dataframe machine-learning