字典到数据帧错误:“如果使用所有标量值,则必须传递索引”

Lon*_*rgy 26 python excel dictionary dataframe pandas

目前,我正在使用 for 循环从文件夹中读取 csv 文件。读取 csv 文件后,我将数据存储到字典的一行中。当我使用“print(list_of_dfs.dtypes)”打印数据类型时,我收到:

dtype:对象 DATETIME:对象 值:float64 ID:int64 ID 名称:对象。

请注意,这是一个嵌套字典,其中每个数据字段中存储了数千个值。我有上面列出的 26 行结构。我正在尝试将字典行附加到数据框中,其中只有 1 行由数据字段组成:

索引日期时间值 ID ID 名称。

注意:我正在学习Python。我尝试使用数组来存储数据,然后将数组转换为数据帧,但无法附加数据帧的行。

使用字典方法我尝试“df = pd.Dataframe(list_of_dfs)”这会引发错误。

list_of_dfs = {} 

for I in range(0,len(regionLoadArray)
list_of_dfs[I] = pd.read_csv(regionLoadArray[I]) 

#regionLoadArray contains my- file names from list directory.

dataframe = pd.DataFrame(list_of_dfs)
#this method was suggested at thispoint.com for nested dictionaries.
#This is where my error occurs^
Run Code Online (Sandbox Code Playgroud)

ValueError:如果使用所有标量值,则必须传递索引

感谢您对这个问题的任何帮助,因为我是 python 新手。我当前的目标是简单地生成一个带有标题的数据框,然后将其发送到 csv。

geb*_*imo 26

根据您的需求,一个简单的解决方法可能是:

dct = {'col1': 'abc', 'col2': 123}
dct = {k:[v] for k,v in dct.items()}  # WORKAROUND
df = pd.DataFrame(dct)
Run Code Online (Sandbox Code Playgroud)

这导致

print(df)

  col1  col2
0  abc   123
Run Code Online (Sandbox Code Playgroud)


emb*_*s99 15

不幸的是,Pandas 在创建 DataFrame 时总是需要索引。您可以自己设置它,也可以使用具有以下结构的对象,以便 pandas 可以确定索引本身:

    data= {'a':[1],'b':[2]}
Run Code Online (Sandbox Code Playgroud)

由于编辑您的案例中的数据并不容易,

一个hacky解决方案是将数据包装到一个列表中

    dataframe = pd.DataFrame([list_of_dfs])
Run Code Online (Sandbox Code Playgroud)


ang*_*tis 8

出现此错误是因为 pandas 需要索引。乍一看,这似乎有点令人困惑,因为您会想到列表索引。这本质上要求的是每个字典对应于每个字典的列号。你可以这样设置:

import pandas as pd
list = ['a', 'b', 'c', 'd']
df = pd.DataFrame(list, index = [0, 1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

然后数据框产生:

   0  
0 'a'
1 'b'
2 'c'
3 'd'
Run Code Online (Sandbox Code Playgroud)

具体来说,对于您来说,使用 numpy 可能看起来像这样(未经测试):

list_of_dfs = {} 

for I in range(0,len(regionLoadArray)):
    list_of_dfs[I] = pd.read_csv(regionLoadArray[I]) 

ind = np.arange[len(list_of_dfs)]

dataframe = pd.DataFrame(list_of_dfs, index = ind)
Run Code Online (Sandbox Code Playgroud)


小智 5

import pandas as pd

d = [{"a": 1, "b":2, "c": 3},
    {"a": 4, "b":5, "c": 6},
    {"a": 7, "b":8, "c": 9}
]

pd.DataFrame(d, index=list(range(len(d))))
Run Code Online (Sandbox Code Playgroud)

返回:

   a    b   c
0   1   2   3
1   4   5   6
2   7   8   9
Run Code Online (Sandbox Code Playgroud)