我有许多格式不同的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'}
答案 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()
代码以获取所需的内容