来自多个字典列表的 DataFrame,其中键是索引,值是列数据
DataFrame from list of multiple dictionaries where keys are index and values is column data
我正在尝试使用字典列表中的 pandas 创建一个 DataFrame,如下所示:
[{'3600': '12', '7600': '1212343'}, {'0': 0.0, '3600': 0.0, '7200': 0.0, '10800': 0.0, '14400': 0.0, '18000': 0.0, '21600': 0.0, '25200': 116.93828280645994} .... ]
我的专栏是项目列表:["col1", "col2" ...]
我想要的是dicts的键作为索引,dicts的值应该填充列。在这个例子中:
col1 col2
0 0/NaN 0.0
3600 12 0.0
7600 1212343 NaN
7200 NaN 0.0
10800 NaN 0.0
18000 NaN 0.0
21600 NaN 0.0
25200 NaN 116.93828280645994
所以每个字典的值基本上代表列值。由于字典可以有不同的大小,我需要添加 NaN。
我以为我已经通过这里的帮助 (Create a Dataframe from list of Dictionaries) 解决了这个问题,如下所示:
columns = ["col", "col2" ...]
df_data = mydataasabove
final_dict = defaultdict(list)
for data in df_data:
for key, value in data.items():
final_dict[key].append(value)
final_dict = dict(final_dict)
df = pd.DataFrame.from_dict(final_dict, orient='index', columns=columns)
但这给了我这样的 df:
col1 col2
3600 12 0.0
7600 1212343 NaN
0 0 NaN
7200 0 NaN
10800 0 NaN
14400 0 NaN
18000 0 NaN
21600 0 NaN
25200 116.938 NaN
如您所见,这些值与我的列不正确对应。打印final_dict
的输出为:
{'3600': ['12', 0.0], '7600': ['1212343'], '0': [0.0], '7200': [0.0], '10800': [0.0], '14400': [0.0], '18000': [0.0], '21600': [0.0], '25200': [116.93828280645994]}
我也尝试了一些与 Chainmap 类似的东西:
df = pd.DataFrame.from_dict(ChainMap(*nec_data), orient='index', columns=['col1'])
但我无法添加多列。
也许有人可以借给我一个?将不胜感激!提前致谢
您可以读取数据框并转置,然后在 df.rename
和 f-strings
的帮助下重命名以调整列名称
pd.DataFrame(d).T.rename(columns=lambda x: f"col{x+1}")
col1 col2
3600 12 0
7600 1212343 NaN
0 NaN 0
7200 NaN 0
10800 NaN 0
14400 NaN 0
18000 NaN 0
21600 NaN 0
25200 NaN 116.938
我正在尝试使用字典列表中的 pandas 创建一个 DataFrame,如下所示:
[{'3600': '12', '7600': '1212343'}, {'0': 0.0, '3600': 0.0, '7200': 0.0, '10800': 0.0, '14400': 0.0, '18000': 0.0, '21600': 0.0, '25200': 116.93828280645994} .... ]
我的专栏是项目列表:["col1", "col2" ...]
我想要的是dicts的键作为索引,dicts的值应该填充列。在这个例子中:
col1 col2
0 0/NaN 0.0
3600 12 0.0
7600 1212343 NaN
7200 NaN 0.0
10800 NaN 0.0
18000 NaN 0.0
21600 NaN 0.0
25200 NaN 116.93828280645994
所以每个字典的值基本上代表列值。由于字典可以有不同的大小,我需要添加 NaN。
我以为我已经通过这里的帮助 (Create a Dataframe from list of Dictionaries) 解决了这个问题,如下所示:
columns = ["col", "col2" ...]
df_data = mydataasabove
final_dict = defaultdict(list)
for data in df_data:
for key, value in data.items():
final_dict[key].append(value)
final_dict = dict(final_dict)
df = pd.DataFrame.from_dict(final_dict, orient='index', columns=columns)
但这给了我这样的 df:
col1 col2
3600 12 0.0
7600 1212343 NaN
0 0 NaN
7200 0 NaN
10800 0 NaN
14400 0 NaN
18000 0 NaN
21600 0 NaN
25200 116.938 NaN
如您所见,这些值与我的列不正确对应。打印final_dict
的输出为:
{'3600': ['12', 0.0], '7600': ['1212343'], '0': [0.0], '7200': [0.0], '10800': [0.0], '14400': [0.0], '18000': [0.0], '21600': [0.0], '25200': [116.93828280645994]}
我也尝试了一些与 Chainmap 类似的东西:
df = pd.DataFrame.from_dict(ChainMap(*nec_data), orient='index', columns=['col1'])
但我无法添加多列。
也许有人可以借给我一个?将不胜感激!提前致谢
您可以读取数据框并转置,然后在 df.rename
和 f-strings
pd.DataFrame(d).T.rename(columns=lambda x: f"col{x+1}")
col1 col2
3600 12 0
7600 1212343 NaN
0 NaN 0
7200 NaN 0
10800 NaN 0
14400 NaN 0
18000 NaN 0
21600 NaN 0
25200 NaN 116.938