gpt4 book ai didi

python - 如何将包含存储为文本和数字的值的 Pandas 列分成两个单独的列

转载 作者:太空狗 更新时间:2023-10-30 01:43:12 26 4
gpt4 key购买 nike

我有一个 Pandas 专栏,其中包含一项调查的结果,这些结果可以是自由文本,也可以是 1-5 之间的数字。我正在从 JSON 格式的 API 中检索这些并将它们转换为 DataFrame。每行代表一个问题,参与者的回答如下:

Memberid | Question | Answer
1 Q1 3
1 Q2 2
1 Q3 Test Text
2 Q1 3
2 Q2 2
2 Q3 Test Text

现在,包含结果的列将所有结果都存储为字符串,因此当将它们导出到 excel 时,数字将存储为文本。

我的目标是为文本答案设置一个单独的列,并将它们最初所在的字段留空,以便我们为文本结果和数字结果提供单独的列以用于计算目的。

Memberid | Question | Numeric Answers | Freetext answers
1 Q1 3
1 Q2 2
1 Q3 Test Text
2 Q1 3
2 Q2 2
2 Q3 Test Text

我从这样的列表中生成这个 df:

d = {'Memberid':memberid, 'Question':title, 'Answer':results}
df = pd.DataFrame(d)

所以我尝试的第一件事是通过以下方式将列中的数值从字符串转换为数字:

df["Answer"] = pd.to_numeric(df['Answer'], errors='ignore')

我的想法是,如果可行,我可以简单地执行一个 for 循环来检查答案列中的值是否为字符串,然后将该值移动到新列中。

问题是,errors 命令无法按预期工作。当我将其置于忽略状态时,没有任何内容被转换。当我将其更改为强制时,数字从 str 转换为数字,但在 Excel 中包含自由文本答案的字段现在为空。

最佳答案

您可以使用 Series.str.extract 使用正则表达式模式:

  • (\d+)?将提取连续的数字
  • (\D+)将提取连续的非数字字符
  • ?P<text>语法将为您的匹配组命名 - 使其成为列标题。

df.join(df.pop('Answer').str.extract('(?P<numbers>\d+)?(?P<text>\D+)?').fillna(''))

[输出]

   Memberid Question numbers       text
0 1 Q1 3
1 1 Q2 2
2 1 Q3 Test Text
3 2 Q1 3
4 2 Q2 2
5 2 Q3 Test Text

关于python - 如何将包含存储为文本和数字的值的 Pandas 列分成两个单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56851679/

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