Pandas处理数据的一些常用技巧

利用Pandas处理数据时遇到的一些常见文件以及处理方法

  • 文件过大
  • 去除重复记录
  • 选择
  • 赋值
  • 删除
  • 合并
  • 排序
  • null和nan
  • 分组操作
  • 单/多列运算
  • 时间
    • Datetime
    • Timedelta
  • 某列属性取值个数

文件过大

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直接指定要删除的行或列

合并

Pandas处理数据的一些常用技巧_第1张图片
合并操作之后往往要调整列的顺序,直接操作即可

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是最为常用的操作之一,但是其用法繁多,需要好好熟悉运用。

  1. 首先groupby操作之后,用来分组的属性会变成索引,下列语句可以还原成属性
port_data = port_data.groupby('TRANS_NODE_NAME')['LONGITUDE','LATITUDE'].mean().reset_index()
  1. 想把分组的数据还原成原来的df规模大小(行数)
    在这里插入图片描述
  2. 可以分组之后接上聚合函数
    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')

Pandas处理数据的一些常用技巧_第2张图片

Timedelta

两个Datetime格式相减会得到一个Timedelta类型变量
Timedelta只有天,秒,毫秒3个可以访问。

Timedelta obj.days(seconds,microseconds)

某列属性取值个数

你可能感兴趣的:(数据竞赛)