文章目录
前言
- 前言
- 多重条件筛选
- 用exec在循环里更改变量名称
- 和 eval的区别:
- 按字符串包含字符筛选
- 按列获取数据
- 读取 .csv时选择不同的列属性方式:
- 时间格式:to_datetime
- 简单的对单个元素操作:
记录下写程序过程中用到的觉得实用的pandas操作, 不断更新下,方便自己查找
多重条件筛选df[(条件1) & (条件2)]
import pandas as pd
import numpy as np
A = np.random.rand(3, 3)
B = pd.DataFrame(A)
# 多重条件筛选
B[(B[0]>0.1) & (B[1]>> a = 5
>>> eval('37 + a') # it is an expression
42
>>> exec('37 + a') # it is an expression statement; value is ignored (None is returned)
>>> exec('a = 47') # modify a global variable as a side effect
>>> a
47
>>> eval('a = 47') # you cannot evaluate a statement
Traceback (most recent call last):
File "", line 1, in
File "", line 1
a = 47
^
SyntaxError: invalid syntax
按字符串包含字符筛选
.str.contains()
>>> B[3] = ['中国', '美国', '欧洲']
>>> B
0 1 2 3
0 0.179662 0.856873 0.291942 中国
1 0.008990 0.473773 0.659489 美国
2 0.525482 0.710721 0.241518 欧洲
>>> B[B[3].str.contains('国')]
>>> 0 1 2 3
0 0.179662 0.856873 0.291942 中国
1 0.008990 0.473773 0.659489 美国
.isin()
>>> B[B[3].isin(['中国', '美国', '英国'])]
>>> 0 1 2 3
0 0.179662 0.856873 0.291942 中国
1 0.008990 0.473773 0.659489 美国
按列获取数据
# 通过列名获取
tmp = df['列名'] # tmp 就是获取的列
# 列名太长, 不打,用索引获取第三列
tmp = df[df.columns[3]]
# 另一种方法,也可以获取多列
tmp = df.iloc[:, 3]
tmp = df.iloc[:m 3:5]
读取 .csv时选择不同的列属性方式:
用header参数控制: header=0
或不指定时,默认第一行为columns。
pd.read_csv("1.csv", header=0)
不使用第一行, 由pandas自动生成0, 1作为columns:
pd.read_csv("1.csv", header=None)
跳过前几行废话:
pd.read_csv("1.csv," skip_row=3)
时间格式:to_datetime
datetime库是很方便的一个管理时间的python库,pandas与之有紧密的联动,通过 pd.datetime()可以实现。 甚至比datetime库本身更容易操作。
简单的对单个元素操作:>>>pd.to_datetime('20200308')
>>>Timestamp('2020-03-08 00:00:00')
>>>>pd.to_datetime('2020-03-08')
>>>Timestamp('2020-03-08 00:00:00')
>>>>>pd.to_datetime('2020/03/08')
>>>Timestamp('2020-03-08 00:00:00')
可以看到:这几种常见的时间格式, 使用to_datetime方法都可以直接把该字符串转为datetime的时间类,极为方便,无需指定转换格式。
pandas也提供了指定转换格式, 如:
>>>pd.to_datetime('2020#03#08', format='%Y#%m#%d')
>>>Timestamp('2020-03-08 00:00:00')
除了日期, 时间也类似:
>>>pd.to_datetime('13:50:00')
>>>Timestamp('2020-07-14 13:50:00')
>>>>pd.to_datetime('13/50/00', format='%H/%M/%S)
>>>Timestamp('2020-07-14 13:50:00')
时间和日期一起输入也很简单, 中间可以用空格隔开:
>>>pd.to_datetime(20200712 13:50:20)
>>>Timestamp('2020-07-12 13:50:20')
后面就可以用datetime的各种操作进行处理了:
>>>import datetime
>>>pd.to_datetime(20200712 13:50:20) + datetime.timedelta(seconds=1)
>>>Timestamp('2020-07-12 13:50:21')