我在python中有一个简单的函数,可以以编程方式加载csv,转置许多列并以csv的形式导出回来
## transpose columns ##
def stack_file(input, indexes, delimiter):
df = pd.read_csv(input, sep=delimiter)
print(df.columns.values)
print(indexes)
#df.set_index(['Province/State','Country/Region','Lat','Long'], inplace=True)
df.set_index(indexes, inplace=True)
df = df.stack()
df.to_csv(path.join(path.dirname(input),path.basename(input)),sep="\t")
现在,您可以在注释行中看到用测试数组调用的函数-使用该行有效。如果我尝试传递数组,则会出现以下错误:
ValueError:长度不匹配:预期30870行,收到的长度为1的数组
我要传递的数组是通过以下方式生成的,如果我打印它,它的显示与注释行中的数组完全一样
header_indexes = np.array([])
for x in range(0, header_index_last):
header_indexes = np.append(header_indexes, column[x])
我试图查看文档,但我真的不明白为什么这不起作用...
答案 0 :(得分:2)
这里的问题是将一个numpy数组传递给set_index。将其转换为列表,它应该可以工作。
所以替换
df.set_index(indexes, inplace=True)
使用
df.set_index(indexes.tolist(), inplace=True)