我想根据新创建的列名进行循环,但在df1['mouse']处出现此错误。append(a.iloc[5,8]):int对象不可下标
import pandas as pd
import numpy as np
dfdata = []
for file in files:
df1 = pd.read_csv(file, sheetname='sheet1')
dfdata.append(df1)
df1 = pd.concat(dfdata)
df1['mouse'] = np.empty((len(df1),0)).tolist()
df1['kb'] = np.empty((len(df1),0)).tolist()
df1['monitor'] = np.empty((len(df1),0)).tolist()
for a in df1:
df1['mouse'].append(a.iloc[5,8])
df1['kb'].append(a.iloc[6,8])
df1['monitor'].append(a.iloc[7,8])
b = {'Mouse':df1['mouse'],'Keyboard':df1['kb'],'Monitor':df1['monitor']}
dfAll = pd.DataFrame(b)
很抱歉,我还不能对你的问题发表评论,因为我没有足够的声望点数。 于是我写了一个答案
没有真实数据的例子,理解你的问题有点困难
但是,我可以在您的代码中看到一些可能的问题:
如果我是正确的,首先创建3个新列,这样每行中都有一个空列表,如下所示:
您可以使用以下代码执行此操作:
那么我想你是想用这个来填充新的专栏:
一个问题是,当您调用
for a in df1:
时,您正在迭代df1
列的字符串名称。然后调用.iloc
,但它无法工作,因为a
是一个字符串。 您应该这样做:df1[a].iloc
但是,如果要在列中选择一个值,则不能给出2个索引,因为列只有一个维度,因此应该调用
.iloc[i]
,其中i是列的索引另外,当您尝试向
df1['mouse']
添加值时,您正在调用所有列“mouse”上的.append
。您还应该定义列的索引,例如df1['mouse'][i]
,其中i
是一个整数但是,由于您连接了输入数据帧而没有忽略其原始索引,因此这可能是一个问题。因此,您应该尝试像这样连接它们:
df1 = pd.concat(dfdata, ignore_index=True)
。有关更多信息,请参见此处:pandas documentation我希望我帮助澄清了一点
编程相关推荐