Pandas数据帧将NA应用于部分数据

时间:2014-08-17 20:10:12

标签: python-2.7 pandas type-conversion

让我先说一下,我是新手使用熊猫,所以我很抱歉,如果这个问题是基本的或之前已经回答过,我在网上看了,找不到我需要的东西。

我有一个由棒球队赛程组成的数据框。一些游戏已经播放,因此游戏的结果在数据帧中输入。但是,对于尚未发生的游戏,只有他们玩的时间(例如下午1:35)。

所以,我想把所有游戏的价值转换成Na。

谢谢

这里要求的是Arizona Diamondbacks的结果数据框包含

print MLB['ARI']
0     0
1     0
2     0
3     1
4     0
5     0
6     0
7     0
8     1
9     0
10    1
...
151    3:40 pm
152    8:40 pm
153    8:10 pm
154    4:10 pm
155    4:10 pm
156    8:10 pm
157    8:10 pm
158    1:10 pm
159    9:40 pm
160    8:10 pm
161    4:10 pm
Name: ARI, Length: 162, dtype: object

2 个答案:

答案 0 :(得分:0)

无法找出任何直接解决方案,只能迭代

for i in xrange(len(MLB)):
    if 'pm' in MLB.['ARI'].iat[i] or 'am' in MLB.['ARI'].iat[i]:
        MLB.['ARI'].iat[i] = np.nan

如果您的实际值(1和0)也是字符串,这应该有效。如果他们是数字,请尝试:

for i in xrange(len(MLB)):
    if type(MLB.['ARI'].iat[i]) != type(1):
        MLB.['ARI'].iat[i] = np.nan

答案 1 :(得分:0)

更常用的方法是使用矢量化字符串方法。

http://pandas.pydata.org/pandas-docs/stable/basics.html#vectorized-string-methods

mask = MLB['ARI'].str.contains('pm') #create boolean array
MLB['ARI'][mask] = np.nan #the column names goes first

从中创建布尔数组,然后使用它来选择所需的数据。 确保列名称位于掩蔽数组之前,否则您将对数据副本执行操作,并且原始数据框不会更新。

MLB['ARI'][mask] #returns a view on MLB datafrmae, will be updated
MLB[mask]['ARI'] #returns a copy of MLB, wont be updated.