我想根据新创建的列名进行循环,但我在 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 个新列,这样每一行都有一个空列表,如下所示:
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 是列的索引。
此外,当您尝试向 df1['mouse']
添加值时您正在调用.append
在所有“鼠标”列上。您还应该定义列的索引,例如df1['mouse'][i]
哪里i
是一个整数。
但是,由于您连接输入数据帧时没有忽略其原始索引,因此这可能是一个问题。因此,您应该尝试像这样连接它们: df1 = pd.concat(dfdata, ignore_index=True)
。请参阅此处了解更多信息:pandas documentation
我希望我能帮助澄清一下!
关于python - 读取多个数据时,根据列变量将提取的单元格(iloc)循环到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58404342/