将pandas数据帧列表转换为布尔列

时间:2017-05-11 11:52:11

标签: python pandas

尝试.isin()时遇到了一些意外错误 这是问题所在。我已经废弃了网页,变成了数据帧。现在我想进行更改以使数据更适用于项目。 从报废数据中,一列包含所有功能,它是json中的列表,但在pd中,它是“非空对象”:

"feature": ["Wi-Fi", "LAN", "LED"]

我想基于每个功能创建新的布尔列,这将在未来发挥作用。 看起来应该是这样的

Product    Wifi    LAN   LED
1          True    True  True
2          True    False False

我已经尝试了 str.contains .isin(),但只有错误。 如

TypeError: only list-like objects are allowed to be passed to isin(), you passed a [str]
ValueError: Length of values does not match length of index

解决此问题的更好方法是什么?

另外,原始数据是日文的,我用“encoding =”utf-8“加载数据框如何在pandas中使用utf8进行最佳编码?我使用notepad ++作为编辑器。

1 个答案:

答案 0 :(得分:2)

如果apply中需要检查值,则inlist一起使用:

df = pd.read_json('sample.json', lines=True, encoding="utf-8")
print (df)
   access  address                     feature        hour        name offday  \
0      30  5-17-62  [Wi-Fi, LAN1, Non-smoking]  9:00〜22:00  CHEZ MADU       -   
1      30  5-17-62  [Wi-Fi, LAN2, Non-smoking]  9:00〜22:00  CHEZ MADU       -   
2      30  5-17-62  [Wi-Fi, LAN3, Non-smoking]  9:00〜22:00  CHEZ MADU       -   

            tel                                     web  
0  042-465-3533  http://www.hakka-group.co.jp/shoplist/  
1  042-465-3533  http://www.hakka-group.co.jp/shoplist/  
2  042-465-3533  http://www.hakka-group.co.jp/shoplist/  

mask = df['feature'].apply(lambda x: 'LAN1' in x)
print (mask)
0     True
1    False
2    False
Name: feature, dtype: bool