从 pyupset 的 csv 文件构建嵌套数据框或字典
Building nested dataframe or dictionary from csv file for pyupset
我有一个 csv 文件,格式如下,
Type_A, Type_B, Type_C
x1,x2,x3
y1,y2,y3
我需要按照以下格式构建嵌套字典或数据框
Type_A
ID Value
1 x1
2 y1
Type_B
ID Value
1 x2
2 y2
Type_C
ID Value
1 x3
2 y3
在我的第一次尝试中,我就是这样做的
import pandas as pd
df=pd.read_csv(csv_file)
df
Output:
Type_A Type_B Type_C
0 x1 x2 x3
1 y1 y2 y3
虽然我需要做的就是读取列表中的每一列,然后添加索引,然后再将其组合到字典或嵌套数据框中
这就是我将它们存储在列表中的方法。
import pandas as pd
df=pd.read_csv(csv_file)
d1=df.Type_A.tolist()
d2=df.Type_B.tolist()
d3=df.Type_C.tolist()
然后添加索引使用 enumerate()
d1_df=list(enumerate(d1, 1))
d2_df=list(enumerate(d2, 1))
d3_df=list(enumerate(d3, 1))
d1_df # this gives me [(1, 'x1'), (2, 'y1')]
接下来我将标签 ID 和值添加到数据框
labels = ['Id','Value']
d1_df = pd.DataFrame.from_records(d1_df, columns=labels)
d2_df = pd.DataFrame.from_records(d2_df, columns=labels)
d3_df = pd.DataFrame.from_records(d3_df, columns=labels)
d1_df # this gives me Id Value
# 0 1 x1
# 1 2 y1
现在我需要以某种方式将它们嵌套在字典中
首先,而不是你的
d1_dict=list(enumerate(d1, 1))
d2_dict=list(enumerate(d2, 1))
d3_dict=list(enumerate(d3, 1))
使用
lst = 3 * [None] # Creating a list with 3 temporary items
lst[0] = list(enumerate(d1, 1))
lst[1] = list(enumerate(d2, 1))
lst[2] = list(enumerate(d3, 1))
(即列表的 list;我选择了更合适的名称 lst
而不是您的 dx_dict
)。
然后创建嵌套字典:
result = {}
for col, id, lt in zip(df.columns, range(0, 3), lst):
result[col] = {'ID': id} # Creating column_name key and assigning inner dict to it
result[col].update(lt) # Adding key:value pairs from the list of pairs to inner dict
result
的值将是
{'Type_A': {'ID': 0, 1: 'x1', 2: 'y1'},
'Type_B': {'ID': 1, 1: ' x2', 2: ' y2'},
'Type_C': {'ID': 2, 1: ' x3', 2: ' y3'}}
(我不知道你想要 ID 键的值,所以我使用 range(0, 3)
来生成序号,我在中使用了编号 x
, y
我的 CSV
文件以区分列。)
附录 1:
如果我正确理解你编辑的问题,你想要别的东西,所以我代码的最后一部分可能是
result = {}
for col, lt in zip(df.columns, lst):
result[col] = {'ID': 'Value'}
result[col].update(lt)
result
给出 result
:
{'Type_A': {'ID': 'Value', 1: 'x1', 2: 'y1'},
'Type_B': {'ID': 'Value', 1: ' x2', 2: ' y2'},
'Type_C': {'ID': 'Value', 1: ' x3', 2: ' y3'}}
附录 2:
或者您想要其他东西 - 所以不要使用 附录 1 中的命令
这个命令(目录理解)
result = {col: [('ID', 'Value')] + lt for col, lt in zip(df.columns, lst)}
给出 result
:
{'Type_A': [('ID', 'Value'), (1, 'x1'), (2, 'y1')],
'Type_B': [('ID', 'Value'), (1, ' x2'), (2, ' y2')],
'Type_C': [('ID', 'Value'), (1, ' x3'), (2, ' y3')]}
我有一个 csv 文件,格式如下,
Type_A, Type_B, Type_C
x1,x2,x3
y1,y2,y3
我需要按照以下格式构建嵌套字典或数据框
Type_A
ID Value
1 x1
2 y1
Type_B
ID Value
1 x2
2 y2
Type_C
ID Value
1 x3
2 y3
在我的第一次尝试中,我就是这样做的
import pandas as pd
df=pd.read_csv(csv_file)
df
Output:
Type_A Type_B Type_C
0 x1 x2 x3
1 y1 y2 y3
虽然我需要做的就是读取列表中的每一列,然后添加索引,然后再将其组合到字典或嵌套数据框中
这就是我将它们存储在列表中的方法。
import pandas as pd
df=pd.read_csv(csv_file)
d1=df.Type_A.tolist()
d2=df.Type_B.tolist()
d3=df.Type_C.tolist()
然后添加索引使用 enumerate()
d1_df=list(enumerate(d1, 1))
d2_df=list(enumerate(d2, 1))
d3_df=list(enumerate(d3, 1))
d1_df # this gives me [(1, 'x1'), (2, 'y1')]
接下来我将标签 ID 和值添加到数据框
labels = ['Id','Value']
d1_df = pd.DataFrame.from_records(d1_df, columns=labels)
d2_df = pd.DataFrame.from_records(d2_df, columns=labels)
d3_df = pd.DataFrame.from_records(d3_df, columns=labels)
d1_df # this gives me Id Value
# 0 1 x1
# 1 2 y1
现在我需要以某种方式将它们嵌套在字典中
首先,而不是你的
d1_dict=list(enumerate(d1, 1))
d2_dict=list(enumerate(d2, 1))
d3_dict=list(enumerate(d3, 1))
使用
lst = 3 * [None] # Creating a list with 3 temporary items
lst[0] = list(enumerate(d1, 1))
lst[1] = list(enumerate(d2, 1))
lst[2] = list(enumerate(d3, 1))
(即列表的 list;我选择了更合适的名称 lst
而不是您的 dx_dict
)。
然后创建嵌套字典:
result = {}
for col, id, lt in zip(df.columns, range(0, 3), lst):
result[col] = {'ID': id} # Creating column_name key and assigning inner dict to it
result[col].update(lt) # Adding key:value pairs from the list of pairs to inner dict
result
的值将是
{'Type_A': {'ID': 0, 1: 'x1', 2: 'y1'},
'Type_B': {'ID': 1, 1: ' x2', 2: ' y2'},
'Type_C': {'ID': 2, 1: ' x3', 2: ' y3'}}
(我不知道你想要 ID 键的值,所以我使用 range(0, 3)
来生成序号,我在中使用了编号 x
, y
我的 CSV
文件以区分列。)
附录 1:
如果我正确理解你编辑的问题,你想要别的东西,所以我代码的最后一部分可能是
result = {}
for col, lt in zip(df.columns, lst):
result[col] = {'ID': 'Value'}
result[col].update(lt)
result
给出 result
:
{'Type_A': {'ID': 'Value', 1: 'x1', 2: 'y1'},
'Type_B': {'ID': 'Value', 1: ' x2', 2: ' y2'},
'Type_C': {'ID': 'Value', 1: ' x3', 2: ' y3'}}
附录 2:
或者您想要其他东西 - 所以不要使用 附录 1 中的命令 这个命令(目录理解)
result = {col: [('ID', 'Value')] + lt for col, lt in zip(df.columns, lst)}
给出 result
:
{'Type_A': [('ID', 'Value'), (1, 'x1'), (2, 'y1')],
'Type_B': [('ID', 'Value'), (1, ' x2'), (2, ' y2')],
'Type_C': [('ID', 'Value'), (1, ' x3'), (2, ' y3')]}