pandas 在 Dataframe 每一行上存储字典

3okqufwl  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(168)

我正试图在 Dataframe 中插入一个字典。
下面是我所拥有示例:

x y z
1 2 3
4 5 6
7 8 9

下面是我所需要示例:

x y z
1 2 {'z':3}
4 5 {'z':6}
7 8 {'z':9}

对于这个特定的应用程序,使用Pandas的全部意义在于矢量化操作是可扩展的和高效的。有没有可能把那个列转换成字典的列?我曾经尝试过使用字符串连接,但是这样它就作为字符串而不是字典存储在Pandas中,并且稍后返回时在字典周围加上引号,因为它是一个字符串。

bfnvny8b

bfnvny8b1#

这是不可能的矢量化,这里最好的方法是使用列表解析:

df['z'] = [{'z': z} for z in df['z']]

或者,使用to_dict

df['z'] = df[['z']].to_dict('records')

输出:

x  y         z
0  1  2  {'z': 3}
1  4  5  {'z': 6}
2  7  8  {'z': 9}
计时

在300k行上

# list comprehension
102 ms ± 9.37 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

# to_dict
585 ms ± 25.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
kknvjkwl

kknvjkwl2#

示例

data = {'x': {0: 1, 1: 4, 2: 7}, 'y': {0: 2, 1: 5, 2: 8}, 'z': {0: 3, 1: 6, 2: 9}}
df = pd.DataFrame(data)

代码

df['z'] = pd.Series(df[['z']].T.to_dict())

第一个月

x   y   z
0   1   2   {'z': 3}
1   4   5   {'z': 6}
2   7   8   {'z': 9}

相关问题