gpt4 book ai didi

python - 如何将单个数据帧列中的多个键值对的字符串分解为 python 中的新数据帧?

转载 作者:行者123 更新时间:2023-12-01 00:56:48 26 4
gpt4 key购买 nike

我正在将数据从 SQL 数据库提取到 pandas 数据框中。数据帧是一个单列,包含存储在字符串中的各种数量的键值对。我想创建一个包含两列的新数据框,一列保存键,另一列保存值。

数据框看起来像:

In[1]:
print(df.tail())

Out[1]:
WK_VAL_PAIRS
166 {('sloth', 0.073), ('animal', 0.034), ('gift', 0.7843)}
167 {('dabbing', 0.0863), ('gift', 0.7843)}
168 {('grandpa', 0.0156), ('funny', 1.3714), ('grandfather', 0.0015)}
169 {('nerd', 0.0216)}
170 {('funny', 1.3714), ('pineapple', 0.0107)}

理想情况下,新的数据框如下所示:

0  |  sloth    |  0.073
1 | animal | 0.034
2 | gift | 0.07843
3 | dabbing | 0.0863
4 | gift | 0.7843
...
etc.

我已经成功地将键值对从单行分离到数据帧中,如下所示。从这里开始,将这些对分成各自的列将变得很简单。

In[2]:
def prep_text(row):
string = row.replace('{', '')
string = string.replace('}', '')
string = string.replace('\',', '\':')
string = string.replace(' ', '')
string = string.replace(')', '')
string = string.replace('(', '')
string = string.replace('\'', '')
return string

df['pairs'] = df['WK_VAL_PAIRS'].apply(prep_text)
dd = df['pairs'].iloc[166]
af = pd.DataFrame([dd.split(',') for x in dd.split('\n')])
af.transpose()

Out[2]:

0 sloth:0.073
1 animal:0.034
2 gift:0.7843
3 spirit:0.0065
4 fans:0.0093
5 funny:1.3714

但是,我错过了将此转换应用于整个数据框的飞跃。有没有办法使用 .apply() 样式函数而不是 foreach 循环来做到这一点。处理这个问题最Pythonic的方法是什么?

如有任何帮助,我们将不胜感激。

解决方案

通过克里斯下面的强烈提示,我能够找到满足我需求的适当解决方案:

def prep_text(row):
string = row.replace('\'', '')
string = '"'+ string + '"'
return string


kvp_df = pd.DataFrame(
re.findall(
'(\w+), (\d.\d+)',
df['WK_VAL_PAIRS'].apply(prep_text).sum()
)
)

最佳答案

尝试使用 re.findallpandas.DataFrame:

import pandas as pd
import re

s = pd.Series(["{(stepper, 0.0001), (bob, 0.0017), (habitual, 0.0), (line, 0.0097)}",
"{(pete, 0.01), (joe, 0.0019), (sleep, 0.0), (cline, 0.0099)}"])

pd.DataFrame(re.findall('(\w+), (\d.\d+)', s.sum()))

输出:

          0       1
0 stepper 0.0001
1 bob 0.0017
2 habitual 0.0
3 line 0.0097
4 pete 0.01
5 joe 0.0019
6 sleep 0.0
7 cline 0.0099

关于python - 如何将单个数据帧列中的多个键值对的字符串分解为 python 中的新数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56178705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com