加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

初学pandas与seaborn(五)pandas数据逻辑筛选,增删改查、加减乘除

(2017-01-03 15:17:06)
标签:

anaconda

pandas

pycharm

seaborn

数据分析

分类: 【python与Anaconda科学计算】
查的问题
  pandas的逻辑筛选功能还是蛮简洁流畅的,直接在方括号里输入逻辑运算符,即可进行
  栏目筛选:
  resultData[resultData['true'] == False]
  在名叫true的这一列查询等于False布尔值的行,即从600多万条里面筛选出“必输”状态的行,花费了:
  0.170 sec
  一开始我选择输入带引号的——'False' 结果给我显示查找出错。原来pandas自动把字符串转换成boolean类型了。所以直接用python的布尔变量就可以。
  批量单元格对比逻辑运算:
  df.gt(df2)
  df2.ne(df)
  查询中可能会用到的一些比较关键字:
 eq  ==  equal to
 ne  !=  not equal to
 lt  <</td>  less than
 le  <=  less than or equal to
 gt  >  greater than
 ge  >=  greater than or equal to
  查找全部满足括号内的条件的列
  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))

这是一些计算样例数据(使用 100 列 x 100,000 行的 DataFrames):

操作 0.11.0 (ms) Prior Version (ms) Ratio to Prior
df1 > df2 13.32 125.35 0.1063
df1 * df2 21.71 36.63 0.5928
df1 + df2 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) ——————这是第几行来着?









0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有