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

时间:2013-07-17 14:18:01

标签: python pandas boolean type-conversion series

我有一个名为df的DataFrame为

  Order Number       Status
1         1668  Undelivered
2        19771  Undelivered
3    100032108  Undelivered
4         2229    Delivered
5        00056  Undelivered

我希望在状态发送时将Status列转换为布尔值(True,并在状态未发送时将False转换为NotANumber 但如果Status既不是'Undelivered'也不是'Delivered',那么它应被视为d = { 'Delivered': True, 'Undelivered': False } 或类似的东西。

我想用dict

True

所以我可以轻松添加其他字符串,可以将其视为False或{{1}}。

4 个答案:

答案 0 :(得分:36)

您可以使用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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

您拥有所需的一切。您会很高兴发现replace

df.replace(d)

答案 3 :(得分:1)

扩展先前的答案:

解释地图方法:

  • 熊猫将在相应的d字典中查找每一行的值,并将所有找到的键替换为d中的值。
  • d中没有键的值将设置为NaN。可以使用fillna()方法进行纠正。
  • 不能在多列上使用,因为熊猫是通过pd.Series的序列化来操作的。
  • 文档:pd.Series.map
d = {'Delivered': True, 'Undelivered': False}
df["Status"].map(d)

替换方法说明:

  • Pandas将在相应的d字典中查找每一行的值,并尝试将所有找到的键替换为d中的值。 < / li>
  • d中没有键的值将被保留。
  • 可处理单列和多列(pd.Seriespd.DataFrame对象)。
  • 文档:pd.DataFrame.replace
d = {'Delivered': True, 'Undelivered': False}
df["Status"].replace(d)

总体而言,替换方法更可靠,并且可以更好地控制数据映射方式以及如何处理缺失值或nan值。