numpy 在 Dataframe 中将字符串转换为字典

olhwl3o2  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(114)

我有一个 Dataframe ,看起来像这样

df = pd.DataFrame({'col_1': ['1', '2', '3', '4'],
                   'col_2': ['a:b,c:d', ':v', 'w:,x:y', 'f:g,h:i,j:']
                   })

col_2的数据类型当前是string,我想从col_2中提取第一个键和第一个值,分别作为col_3和col_4,因此输出如下所示

pd.DataFrame({'col_1': ['a', 'b', 'c', 'd'],
              'col_2': ['a:b,c:d', ':v', 'w:,x:y', 'f:g,h:i,j:'],
              'col_3': ['a','','w','f'],
              'col_4': ['b','v','','g']
               })

这是我目前所做的

df['col_3'] = df['col_2'].apply(lambda x: x.split(":")[0])
df['col_4'] = df['col_2'].apply(lambda x: x.split(":")[1])

但这显然行不通,因为它不是一本字典。

jdgnovmf

jdgnovmf1#

对于正则表达式和str.extract来说,这是一项很好的工作:

df[['col_3', 'col_4']] = df['col_2'].str.extract(r'^([^:,]*):([^:,]*)')

输出:

col_1       col_2 col_3 col_4
0     1     a:b,c:d     a     b
1     2          :v           v
2     3      w:,x:y     w      
3     4  f:g,h:i,j:     f     g

regex demo

slsn1g29

slsn1g292#

字符串方法的另一个选项:

df[["col_3", "col_4"]] = df["col_2"].str.split(",", n=1).str[0].str.split(":", expand=True)

结果:

col_1       col_2 col_3 col_4
0     1     a:b,c:d     a     b
1     2          :v           v
2     3      w:,x:y     w      
3     4  f:g,h:i,j:     f     g

相关问题