【问题标题】:KeyError when parsing CSV file解析 CSV 文件时出现 KeyError
【发布时间】:2019-03-13 12:49:53
【问题描述】:
mtu,dap
06.01.2015 00:00 - 06.01.2015 01:00,36.90

我正在尝试将上图中的逗号分隔数据转换为 pandas,以便使用以下代码进行进一步分析:

import pandas as pd

DAP = pd.read_csv('xx.csv', 
    index_col = 'mtu',
    sep = ',',
    encoding="utf-8-sig")
#DAP = DAP.set_index('mtu')
date_time = DAP['mtu']
Hourly_DAP = DAP['dap']

但是它一直给我以下错误,启用 set_index 和 index_col,尝试了其他可以在网上找到的解决方案,但似乎没有一个解决这个问题:

KeyError: 'mtu'

有人能解决这个问题吗?

我已根据重复问题将代码更新为以下内容,但是现在我得到 nameError that index is not defined。重复问题的答案非常简短,因此无法弄清楚。更新后的代码如下,能挑错吗?:

import pandas as pd

DAP = pd.read_csv('xx.csv',
                  sep = ',',
                  encoding="utf-8-sig")

DAP = DAP.set_index('mtu','dap')
print(DAP.index)
index(['mtu', 'dap'], dtype='object', name='TweetID')

【问题讨论】:

  • 可能有您没有考虑到的空间。我建议您将数据复制并粘贴到代码块中,而不是链接到图像。
  • 更新:在 csv 文件的代码中添加了一个示例 它不允许我在代码块中复制我的数据,如果我从 csv 文件中复制数据,它会作为图像弹出。

标签: pandas csv parsing keyerror


【解决方案1】:

一旦你将一列设为索引,它就不再是一列,所以你必须通过索引来访问它。尝试进行操作

date_time = DAP['mtu']
Hourly_DAP = DAP['dap']

在设置任何索引列之前,在读取文件时都不会

DAP = pd.read_csv('xx.csv', 
    #index_col = 'mtu',
    sep = ',',
    encoding="utf-8-sig")

或之后

#DAP = DAP.set_index('mtu','dap')

【讨论】:

  • 对不起,我不明白你建议我做什么。可以更详细地说明我必须采取的步骤吗?
  • 在将 mtu 列设置为索引之前,您必须执行 date_time=... 的行。在读取 csv 时删除 index_col 参数,它应该可以工作。
  • 它起作用了,但是它给出了之前没有定义 DAP 的通知(这是正确的,因为它是在之后定义的)。设置索引还是不行,看文件后放这个有什么问题:dap.set_index=dap['datetime']
  • 放一个csv文件的例子,告诉我你想要什么,我会编码和解释它。但是,如果它对您有帮助,请不要忘记给答案评分。
【解决方案2】:

这是我花了我一天的时间,如果你能帮忙的话,defo会给你一个很好的评价。我觉得自己像个菜鸟,但必须从某个地方开始。无论如何感谢您的帮助!

af = act_freq['actual_freq']
datetime = act_freq['datetime']
act_freq = pd.read_csv('xx.csv',
                  sep = ',',
                  encoding="utf-8-sig")
act_freq['datetime'] =  pd.to_datetime(act_freq['datetime'], 
        infer_datetime_format=True)

act_freq.set_index=act_freq['datetime']
grid_freq_des = 50

下面的函数给了我我想要的,但是我想为整个文件做这件事

print(sum(abs(grid_freq_des-(af.head(150)))))

所以我花了一天时间设置这样的东西,我无法上班(

  for af in range (act_freq['actual_frequency']):
        freq_dev = grid_freq_des - af
        print(sum(freq_dev))

总而言之,我无法将日期时间设置为索引(python 一直提供自己的索引),我想设置一个函数(在本例中为 freq_dev)来重复 csv 中的“actual_freq”值:

                  datetime  actual_freq
0      2019-01-01 00:00:00       50.038
1      2019-01-01 00:00:10       50.021
2      2019-01-01 00:00:20       50.013
3      2019-01-01 00:00:30       50.004

【讨论】:

  • 修复了功能,但一直无法正确设置索引
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2016-01-16
  • 1970-01-01
  • 2020-01-31
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多