文件过大
1.可以用chunksize参数分成文件块(部分行),读取的返回值将会是一个可迭代对象TextFileReade。
2.可以用usecols = [‘loadingOrder’]参数只读取部分列进行分开处理。
去除重复记录
norepeat_df = df.drop_duplicates(subset=[‘A_ID’, ‘B_ID’], keep=‘first’)
当keep=False时,就是去掉所有的重复行
当keep=‘first’时,就是保留第一次出现的重复行
当keep=’last’时就是保留最后一次出现的重复行。
选择
1.根据index或者cols名字直接选择
2.根据数字索引
列
abcol = df.iloc[:, [0,1]] ##wayIII, 利用iloc
abcol = df.iloc[:, [0:1]] ##wayIV, 利用iloc
行
r1 = df[0:1]
赋值
1.列值判断
df1.loc[(df1[0]=='js') & (df1[2]=='cz'),[1,3]]=[588,688]
对列名为1和3的列根据0和2的条件赋予不同值
2.行索引
all_data['direction'].iloc[i] = 1
删除
DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)
1)labels和axis 的组合
2)index或columns直接指定要删除的行或列
合并
合并操作之后往往要调整列的顺序,直接操作即可
df = df[['user_id','book_id','rating','mark_date']] # 调整列顺序
排序
all_data.sort_values(['loadingOrder','timestamp'],inplace=True)
null和nan
1.判断它们不能直接用等号
df = df[pd.notnull(df['a'])]
df = df[~np.isnan(df['a'])]
2.删除nan所在的行/列
可以用df.dropna(axis=0,how='all')
how可以是all或者any分别处理全为nan或出现nan
3.填充
df.fillna({‘column_name_A’: 0,‘column_name_B’: 100})
分组操作
groupby是最为常用的操作之一,但是其用法繁多,需要好好熟悉运用。
- 首先groupby操作之后,用来分组的属性会变成索引,下列语句可以还原成属性
port_data = port_data.groupby('TRANS_NODE_NAME')['LONGITUDE','LATITUDE'].mean().reset_index()
- 想把分组的数据还原成原来的df规模大小(行数)
- 可以分组之后接上聚合函数
data[['price','quantity']].agg(['sum','mean'])
agg后面可以是数组,对每个属性实施一遍;也可以是字典,每个属性用不同的函数
单/多列运算
单列
df['col2'] = df['col1'].map(lambda x: x**2)
多列
df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)
时间
Datetime
datetime以毫秒形式存储日期和时间
1.pd.to_datetime
参考链接.
该函数功能十分强大复杂,可以用时间戳结合起始时间生成实际时间,也可以根据指定格式或者自动推断格式把字符串变成datetime对象。
unit为数字代表的单位是秒或者小时,origin是起始时间
2.从字符串生成
datetime.strptime(x,'%Y-%m-%d')
与之对应的有从datetime生成字符串的函数
datetime.strftime('%Y/%m/%d %H:%M:%S')
Timedelta
两个Datetime格式相减会得到一个Timedelta类型变量
Timedelta只有天,秒,毫秒3个可以访问。
Timedelta obj.days(seconds,microseconds)