使用CSV中的dict格式化数据帧

时间:2018-11-01 10:04:17

标签: python pandas

我有许多格式不同的Pandas DF,应该将其重塑为通用的目标格式。

现在,我为每个DF编写字典:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({"original_name":["a","b","c"],"original_value":[1,2,3]})


key_dict = {
  "name":df1.original_name,
  "value":df1.original_value,
  "other_value":np.nan
}

target_colnames = ["name","value","other_value"]

new_df = pd.DataFrame(key_dict, columns = target_colnames)

我的问题:带有key_dict的原始列到目标列的映射存储在CSV文件中(索引=值,列=每个DF的键)。

key_df= pd.read_csv("key_df.csv").set_index("key")
key_df= key_df.to_dict()

new_df = pd.DataFrame(key_df["df1"], columns = target_colnames)

这会导致以下错误:

 "If using all scalar values, you must pass an index"

我认为这是因为'key_df'的值是字符串,与'key_dict'不同。我需要在按键上应用“ eval”吗?

'key_df [“ df1”]'的外观如下:

{'name': 'df1.original_name',
 'other_value': 'np.nan',
 'value': 'df1.original_value'}

1 个答案:

答案 0 :(得分:1)

使用:

void

输出

key_df = {i:eval(j) for i,j in key_df.items()} # Use iteritems() for python 2
new_df = pd.DataFrame(key_dict, columns = target_colnames)

说明

在加载并将name value other_value a 1 NaN b 2 NaN c 3 NaN 转换为csv之后,您必须进行dict理解才能将存储为dict的{​​{1}}值转换为{{ 1}},因此您可以重用相同的pd.Series()代码以获取所需的内容