查的问题:
pandas的逻辑筛选功能还是蛮简洁流畅的,直接在方括号里输入逻辑运算符,即可进行
栏目筛选:
resultData[
resultData['true'] == False]
在名叫true的这一列查询等于False布尔值的行,即从600多万条里面筛选出“必输”状态的行,花费了:
0.170 sec
一开始我选择输入带引号的——'False' 结果给我显示查找出错。原来pandas自动把字符串转换成boolean类型了。所以直接用python的布尔变量就可以。
批量单元格对比逻辑运算:
df.
gt(df2)
df2.
ne(df)
查询中可能会用到的一些比较关键字:
| | |
| | |
| | |
| | |
| | |
| | |
查找
全部满足括号内的
条件的列:
print (df > 0).all()
查找
部分满足括号内的
条件的列:
print (df > 0).any()
查询是否为空:
df.empty
相同值统计(直方图):
例如,随机生成1到7的10个数据:s = pd.Series(np.random.randint(0, 7, size=10))
s.value_counts()
然后统计重复的个数
df3 = df2.copy()
使用DataFrame里面的copy命令,会整个替换掉原来的数据,而不是只单纯更新对应的行和列。比如之前的df2是10行5列的,而df是10行4列的。当运用语句
df2 = df.copy()的时候,df2就完完全全变成了df2。其实不需要指针能进行垃圾回收的语言都有类似的性质,就是除了基本元素外,其余所有的变量都是引用。所以,要不能单纯的使用
df2 =df,因为这样当更改了df2的内容后,df的内容也会同步更改,2者是相互间的引用。想新建一个数据,得进行copy复制,这样才会新开一个完全不一样的内存空间。
修改列,给数据新加一列也很简单,直接指定那一列叫啥,没有就创建,有的话就覆盖:
df2[
'E'] = ['one', 'one', 'two', 'three', 'four', 'two', 'three', 'four', 'three', 'three']
或者df2.loc[
:,
'B'] = np.array([5] * len(df))
修改行,把第四行对应的A、B、C、D列对应改成1、2、3、4:
df2.iloc[
3,
:] = [1, 2, 3, 4]
修改单元【标签】:
df.at[
dates[0],
'A'] = 0
修改单元【序号】:
df.iat[
0,
1] = 0
条件修改【批量】:
df2[df2 > 0] = -df2
删除列:
del df3['D']
修改字符串大小写:
例如数据:s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca',
np.nan, 'CABA', 'dog', 'cat'])
s.str.lower()
DataFrame(数据帧)的2种相加法则:
排除NaN的加法:
df
+ df2
将NaN视为0的加法:
df.
add(df2,
fill_value=0)
完整测试代码:
dates = ['a', 'b', 'c', 'd']
df = pd.DataFrame(np.random.randn(4, 3), index=dates, columns=list('ABC'))
print df
df2 = df[df < 0].copy()
print df2
print (df + df2)
print (df.add(df2, fill_value=0))
|
这是一些计算样例数据(使用 DataFrames
):
操作 | 0.11.0 (ms) | Prior Version (ms) | Ratio to Prior |
---|---|---|---|
df1 | 13.32 | 125.35 | 0.1063 |
df1 | 21.71 | 36.63 | 0.5928 |
df1 | 22.04 | 36.50 | 0.6039 |
对NaN的处理:
添加一两个NaN空列?:
df1 = df.reindex(index=dates[0:4], columns=['F']+list(df.columns) + ['E'])
(解读:用原来的index来做行标,用原来的列加上F、E列,生成一个新表赋值给df1)
丢弃包含NaN的行:
df1.dropna(how='any')
用指定值填充NaN:
df1.fillna(value=5)
指出表中的NaN并标记为True:
pd.isnull(df1)
数值处理:
算出每列的平均值:
df.mean()
算出指定行的平均值:
df.mean(1) ——————这是第几行来着?