将包含字符串的Pandas系列转换为布尔值

wor*_*ins 24 python boolean type-conversion series pandas

我有一个名为数据帧df作为

  Order Number       Status
1         1668  Undelivered
2        19771  Undelivered
3    100032108  Undelivered
4         2229    Delivered
5        00056  Undelivered
Run Code Online (Sandbox Code Playgroud)

我想将Status列转换为布尔值(True当状态已交付且False状态为未交付时),但如果状态既不是'未交付'也不是'已交付',则应将其视为类似NotANumber或类似的内容.

我想用dict

d = {
  'Delivered': True,
  'Undelivered': False
}
Run Code Online (Sandbox Code Playgroud)

所以我可以轻松添加其他字符串,可以被视为TrueFalse.

jor*_*ris 39

你可以使用map:

In [7]: df = pd.DataFrame({'Status':['Delivered', 'Delivered', 'Undelivered',
                                     'SomethingElse']})

In [8]: df
Out[8]:
          Status
0      Delivered
1      Delivered
2    Undelivered
3  SomethingElse

In [9]: d = {'Delivered': True, 'Undelivered': False}

In [10]: df['Status'].map(d)
Out[10]:
0     True
1     True
2    False
3      NaN
Name: Status, dtype: object
Run Code Online (Sandbox Code Playgroud)


Yaa*_*ler 15

扩展之前的答案:

地图方法解释:

  • Pandas 将在相应的字典中查找每一行的值d,并用 中的值替换任何找到的键d
  • 没有输入键的值d将被设置为NaN。这可以通过fillna()方法来纠正。
  • 不适用于多列,因为 pandas 通过pd.Series此处的序列化进行操作。
  • 文档:pd.Series.map
d = {'Delivered': True, 'Undelivered': False}
df["Status"].map(d)
Run Code Online (Sandbox Code Playgroud)

替换方法说明:

  • dPandas 将在相应的字典中查找每行的值,并尝试用 中的值替换任何找到的键d
  • 没有输入键的值d将被保留。
  • 适用于单列和多列(pd.Seriespd.DataFrame对象)。
  • 文档:pd.DataFrame.replace
d = {'Delivered': True, 'Undelivered': False}
df["Status"].replace(d)
Run Code Online (Sandbox Code Playgroud)

总体而言,替换方法更加稳健,并且可以更好地控制数据映射方式+如何处理缺失值或纳米值。


Kap*_*nis 8

replace仅在指定列中替换值C2并将结果作为DataFrame类型的方法的示例.

import pandas as pd
df = pd.DataFrame({'C1':['X', 'Y', 'X', 'Y'], 'C2':['Y', 'Y', 'X', 'X']})

  C1 C2
0  X  Y
1  Y  Y
2  X  X
3  Y  X

df.replace({'C2': {'X': True, 'Y': False}})

  C1     C2
0  X  False
1  Y  False
2  X   True
3  Y   True
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可能会回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高​​答案的长期价值。 (2认同)

Dan*_*lan 6

你有你需要的一切。你会很高兴地发现replace

df.replace(d)
Run Code Online (Sandbox Code Playgroud)

  • 我认为 ``map`` 在这里是一个更好的选择,实际上,因为如果一个值不在 ``d`` 中,那么该值是无效的,应该用 ``NaN`` 替换。 (3认同)