我有以下代码,
arguments
在csv文件没有足够的覆盖率(所有工作日)之前,它一直有效。例如,使用以下.csv文件
df = pd.read_csv(CsvFileName)
p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0)
p.fillna(0, inplace=True)
p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]] = p[["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]].astype(int)
我会收到以下错误:
DOW,Hour,Changes
4Wed,01,237
3Tue,07,2533
1Sun,01,240
3Tue,12,4407
1Sun,09,2204
1Sun,01,240
1Sun,01,241
1Sun,01,241
3Tue,11,662
4Wed,01,4
2Mon,18,4737
1Sun,15,240
2Mon,02,4
6Fri,01,1
1Sun,01,240
2Mon,19,2300
2Mon,19,2532
它似乎有一个非常简单的解决方案,但我对Python太新了解如何解决它。
答案 0 :(得分:20)
使用reindex
获取所需的所有列。它会保留已存在的那些,否则放入空列。
p = p.reindex(columns=['1Sun', '2Mon', '3Tue', '4Wed', '5Thu', '6Fri', '7Sat'])
因此,您的整个代码示例应如下所示:
df = pd.read_csv(CsvFileName)
p = df.pivot_table(index=['Hour'], columns='DOW', values='Changes', aggfunc=np.mean).round(0)
p.fillna(0, inplace=True)
columns = ["1Sun", "2Mon", "3Tue", "4Wed", "5Thu", "6Fri", "7Sat"]
p = p.reindex(columns=columns)
p[columns] = p[columns].astype(int)
答案 1 :(得分:9)
我有一个非常类似的问题。我得到了同样的错误,因为csv在标题中包含空格。我的csv包含一个标题"性别"我把它列为:
[['Gender']]
如果您可以轻松访问csv,则可以使用excel公式trim()
剪切单元格的任何空格。
或者像这样删除它
df.columns = df.columns.to_series().apply(lambda x: x.strip())
答案 2 :(得分:1)
请尝试使用此方法清理和格式化您的列名:
df.columns = (df.columns.str.strip().str.upper()
.str.replace(' ', '_')
.str.replace('(', '')
.str.replace(')', ''))
答案 3 :(得分:0)
我有同样的问题。
在第一个开发过程中,我使用了.csv文件(逗号作为分隔符),在保存之前我对其进行了一些修改。 保存后,逗号变成了分号。
在Windows上,它取决于“区域和语言选项”自定义屏幕,您可以在其中找到列表分隔符。这是Windows应用程序希望将其用作CSV分隔符的字符。
在使用全新文件进行测试时,我遇到了这个问题。
我在read_csv方法中删除了'sep'参数 之前:
df1 = pd. read_csv ('myfile.csv', sep=',');
之后:
df1 = pd. read_csv ('myfile.csv');
那样,问题就消失了
希望对您有所帮助:)