【问题标题】:Python Programming Error for DataScience DataFrameDataScience DataFrame 的 Python 编程错误
【发布时间】: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


【解决方案1】:

我不确定您在这里要说什么(不妨在此处放置示例输入和输出),但我遇到了这个问题,它可能在几周前的某个时候具有相同的性质。

CSV 文件是用逗号分隔的,这意味着它始终记下一行中的每个逗号以将它们分隔成列。如果您的 CSV 文件中存在来自字符串的一些脏输入,那么它将弄乱您期望拥有的列。

这里的最佳解决方案是使用一些代码来清理 CSV 文件,将其分隔符更改为另一个字符(可能是“|”、“&”或任何不会与数据混淆的字符),然后修改您的代码以将这些更改反映到 CSV。

【讨论】:

【解决方案2】:

使用 pandas 库来读取文件。

它非常高效,可以节省您自己编写代码的时间。

例如:

import pandas as pd
training_data = pd.read_csv( "train.csv", sep = ",", header = None )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 2018-04-07
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2016-01-19
    • 2020-01-28
    相关资源
    最近更新 更多