我想基于新创建的列名进行循环,但是在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)
答案 0 :(得分:0)
抱歉,我无法对您的问题发表评论,因为我的信誉度不足。 因此,我写了一个答案。
没有实际数据的示例,很难理解您的问题。
但是,我可以在您的代码中看到一些可能的问题:
如果我是正确的话,您首先要创建3个新列,这样在每一行中都有一个空列表,如下所示:
mouse kb monitor
0 [] [] []
1 [] [] []
2 [] [] []
3 [] [] []
4 [] [] []
5 [] [] []
,您可以使用以下代码进行操作:
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']}
一个问题是,当您调用for a in df1:
时,您正在遍历df1
列的字符串名称。然后,您调用.iloc
,但由于a
是一个字符串,因此无法使用。
您应该执行以下操作:df1[a].iloc
。
但是,如果要在列中选择一个值,则不能给出2个索引,因为一列只有一个维,因此应调用.iloc[i]
,其中i是该列的索引。 / p>
此外,当您尝试向df1['mouse']
添加值时,您正在所有“ mouse”列上调用.append
。您还应该定义列的索引,例如df1['mouse'][i]
,其中i
是整数。
但是,由于连接了输入数据框而没有忽略它们的原始索引,因此这可能是一个问题。因此,您应该尝试像这样将它们连接起来:df1 = pd.concat(dfdata, ignore_index=True)
。有关更多信息,请参见此处:pandas documentation
我希望我能澄清一下!