iloc在从字典中迭代数据帧时生成错误

时间:2018-06-10 12:50:23

标签: python dictionary dataframe indexing

我已将文本文件从Dataframes文件夹加载到以文件名为键的字典中。如果我在字典中运行我的项目循环以在我的数据帧上单独执行某些操作,则iloc函数适用于第一个操作,然后生成单个位置索引错误。

 i = 0
 dict = {}
 for root, dirs, files in os.walk(root):
 for file in os.listdir(root):
    if file.endswith(".tlm-raw"):
        name = os.path.splitext(file)[0]
        dict[name] = pd.read_table(os.path.join(root,file),index_col=False,header=None, skiprows=53,engine='python')   

然后我在字典中运行一个循环,让我说我想要每个数据帧的第13列。我第一次使用Iloc调用我的数据帧和切片时它可以工作。

for k in dict:
    df=pd.DataFrame.from_dict(dict[k])
    X=df.iloc[:,12]
    print(X)

直到那时它才有效。但是,如果我进一步希望从中切片。我想要第19列。它引发以下错误。

    y=df.iloc[:,18]
    **IndexError: single positional indexer is out-of-bounds**

我真诚的要求。我真正想要的是从文件夹加载文件,将它们作为数据帧存储在字典中,然后遍历每个数据帧,执行某些操作并将修改后的数据帧存储在新字典中。这样做最可行的方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为您需要先将dict更改为d,因为dict是python kyeword:

 i = 0
 d = {}
 for root, dirs, files in os.walk(root):
 for file in os.listdir(root):
    if file.endswith(".tlm-raw"):
        name = os.path.splitext(file)[0]
        d[name] = pd.read_table(os.path.join(root,file),index_col=False,header=None, skiprows=53,engine='python')   

所以ddictionary of DataFrame s,因此可以通过以下方式进行索引:

d['file_name'].iloc[:, 9]

编辑:

d1 = {}
for k, v in d.items()
  #modify v

  df1[k] = v

我的编辑: 在这里,我假设我们在字典d中有一些数据帧,我正在通过键(在我的例子中是文件名)迭代它们中的每一个。对它们执行n次操作。我们假设我们试图在第31列到第94列之间切片。

d1={}
for k in d:
  df=pd.DataFrame.from_dict(d[k])
  Result=pd.DataFrame(df.iloc[:,30:93])
  d1[k]=pd.DataFrame(Result)

这样您就可以使用相同的键修改字典。

我认为需要:

d1={}
for k, v in d.items():
  d1[k] = v.iloc[:,30:93]

或者:

d1 = {k: v.iloc[:,30:93] for k, v in d.items()}