我有一个数据集,其中包含一列数字和NaN。我想创建一个新的虚拟变量列以供进一步计算。显然有些事情是错的,因为无论我做什么,假人都会是1。
import pandas as pd
import numpy as np
all_air = pd.read_csv('small.csv')
all_air['D(0/1)']=np.nan
#all_air['C'].fillna(-1) #pandas will take NaN as 0 in calculation, right?
print all_air['C']
for n in all_air['C']:
if n is None:
all_air['D(0/1)'] = 0
else:
all_air['D(0/1)'] = 1
all_air.to_csv('sample_small.csv')
我是python的新手,所以这是我可以达到的目标。 提前谢谢。
答案 0 :(得分:1)
作业操作
all_air['D(0/1)'] = 0
为名为0
的整个列将值设置为'D(0/1)'
。因此,实际上,每次遇到n
n is None
的值时,都会将整列设置为0.同样,当n is not None
设置整栏至1
。
从您的描述中可能看起来您更愿意使用掩码,例如n is None
这些位置,并且只修改那些位置的值。
这可以通过loc
索引器实现:
all_air['D(0/1)'] = 1
all_air.loc[all_air['C'].isnull(), 'D(0/1)'] = 0
在这个例子中,我使用了内置函数isnull
,它可以检查pandas.Series
的所有元素,看它们是否为空(NaN
或{{1 }})。它返回None
个布尔值。那些评估为pandas.Series
的位置将被视为评估指标的一部分。
因此,通过将此作为True
索引的第一个维度传递,我们可以仅修改这些行中的值。第二个维度标识要修改的列。将loc
的值放在右侧会自动将该标量广播为兼容的数组形状,以便将其分配到列中(某些0
- by - K
列向量,其中1
将是空条目的数量。)