[关闭]
@codejan 2017-12-11T05:02:37.000000Z 字数 2938 阅读 891

Pandas使用技巧

机器学习


python常用技巧

pandas 概念与注意事项

一个表格称为一个dataframe每一列都是一个series

dataframe.xxx 与 dataframe['xxx']的区别

每一列的命名需要注意尽量不与保留的方法名字冲突,如果A数据集某一列命名为head, 则不能用A.head调用这一列(只能用A['head'])
另一方面

dataframe

.dtypes

返回每一列的数据类型, 如果是object代表是string

.groupby("")

把数据集根据某一列的类别分组, 形成新的group dataframe, 有如下操作
- .getgroup("")

.iterrows()

用于循环每一列, 如果不加的话是循环每一列的标签

  1. for user in user_1.iterrows():
  2. print(user)
  3. 打印每一个user的信息
  4. 这时每个user相当于一个元祖, 如下图所示
  5. (0, user_id u_3895683
  6. shop_id s_779325
  7. time_stamp 2017-08-03 12:20
  8. longitude 115.093
  9. latitude 38.9319
  10. ...
  11. Name: 0, dtype: object)
  12. 如果想要知道usershop_id信息, 必须要用user[1].shop_id 而不是user.shop_id
  13. for user in user_1():
  14. print(user)
  15. 打印每一列的标签(str)
  16. user_id
  17. shop_id
  18. time_stamp
  19. longitude
  20. latitude
  21. wifi_infos
  22. mall_id

.loc[行标签, 列标签]

loc:location by label(行标签和列标签)

df.loc[0:2, :] 定位前三行

  1. In [4]: df.loc[df.AAA < 5,['BBB','CCC']] = 2000; df
  2. Out[4]:
  3. AAA BBB CCC
  4. 0 4 2000 2000
  5. 1 5 555 555
  6. 2 6 555 555
  7. 3 7 555 555
  8. <div class="md-section-divider"></div>

.iloc[行数字地址, 列数字地址]

使用.iloc对数字进行定位
.ix则是两者的混合(可以同时用数字和

.describe( )

df.discribe() 可以用统计量去来描述dataframe的每个属性,当df是group形态时尤其有用(对每一个group都会describe.

  1. user_group = user_data.groupby("shop_id")
  2. user_group.describe()
  3. <div class="md-section-divider"></div>

.sort_values( )

用于对某个属性排序. by=("")设置排序依据.
默认递增, ascending=False设置为递减.

  1. <div class="md-section-divider"></div>
  2. #如果是多重标签
  3. ana.sort_values(by=("latitude","count"),ascending=False)
  4. <div class="md-section-divider"></div>
  5. #代表对latitude下的count属性排序
  6. <div class="md-section-divider"></div>

.drop([ ])

默认删除某一行, axis = 1指定删除某一列, inplace=True删除原列表中的元素, 而不仅仅是返回.
test.drop(["X1"], axis=1, inplace=True)

series

  1. people = pd.Series([3000000, 85000]), index=['Albania', 'Andorra'], name='population')

从上面可以看出series由三部分组成:content, index和name, name是series的名字, index是下标, 用于定位content, 默认是从零开始的数列, 但是也可以赋值为某个字符串数组, 从而代表不同的含义.
dataframe的每一列就是一个series
dataframe有两种方法调用A列, 分别是df.A 和df["A"], 后者可以在A不存在的时候自动创建A, 并且可以解决列名和df的方法名冲突的问题.

.str

可以对这一列引入字符串操作
例如.str.replace('$','') 可以去掉str里面的'$'符号

.astype(float)

把某一列转化为float格式, 比如最常见的就是把string转化为float, 之后可以引入数值运算

.set_index('列名', inplace=true)

把某一列设置为index

.reset_index(inplace=true)

重新恢复index

.index

返回index列表, 可能是数字列表, 也可能是字符串列表(比如discribe().index)

.columns

返回column name列表, 一般是字符串

.values

return : Numpy representation of NDFrame

pandas(pd)

.to_datatime(series)

把某一列数据转化为日期数据

.read_table('road', args)

.read_csv('road', args)

仅读取前两列数据 usecols=[0,1]
仅读取前三行数据 nrows=3

.crosstab(A, B)

A和B是dataframe的两列(内容为属性值), 可以对这两列一起计数形成表格

.concat([A,B], axis=1)

合并A与B两个series, 相同的index合并成一行, 不同的index一个保留原数值, 另一个赋值为NaN

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注