python pandas dataframe常用数据处理总结

最近一直在做数据处理相关的工作,有几点经常遇到的情况总结如下:

  1. 数据中存在为空数据如何处理
处理方式1:丢弃数据行
# 实现方式1
data = data.dropna(subset=['id']) # 若id列中某行数值为空,丢弃整行数据
# 实现方式2
data = df[df['id'].notna()]

处理方式2:填充,定值填充或插值填充
data['value'] = data['value'].fillna(0.0) # 使用0.0对value列中空值进行填充
  1. 丢弃某行某列
# 如果rn列存在,丢弃该列
if 'rn' in df.columns:
    df = df.drop('rn', axis=1)  # axis控制行列
    # 若直接在原数据做操作,需设置inplace参数
    df.drop('rn', axis=1inplace=True)
  1. 如何对某列中字符串数据进行批量操作
# 设time中数据为12:34这种类型
df['time'].str.split(':',expand=True).astype(int) 
# expand参数用以将分割的字符串展开为单独的列,astype用于转换数据类型
  1. 数据中不存在某列,添加列
# 添加有值的列如何做
data = {
   
    'A': ['item1', 'item2', 'item3', 'item4'],
    'B': ['0.1', '0.2', '0.3', '0.4']
}
df = pd.DataFrame(data)

# 增加一列'id'字段, 并选择特定行赋值
df.loc[[True, False, True, True],'id'] = ['1', '2', '3']
# 不支持同时加两列,只能加单列

# 添加无值的列,再进行处理
df['add'] = np.nan
df['add'] = np.where(df['hour'] >= 1000, 1, 0) 
df['hour'] = np.where(df['hour'] >= 1000, df['hour'] - 1000, df['hour'])
  1. 一些日期处理函数
# pd.to_datetime
# 将day转为datetime格式
tmp_day = pd.to_datetime(df['day'], format='%Y%m%d')
    
# pd.to_timedelta
timestamp = tmp_day + pd.to_timedelta(df['hour'], unit='h') + pd.to_timedelta(df['min'],
            unit='m') + pd.to_timedelta(df['add'], unit='D')

  1. 一些处理函数
# id分组中,源数据只有一行batch字段有填充,函数实现将batch拓展填充到各数据行
df['batch'] = df.groupby('id')['batch'].transform(
        lambda x: x.fillna(method='ffill').fillna(method='bfill'))
# 首先通过groupby函数根据id列对数据进行分组,然后对每个分组使用transform函数。
# transform函数中的lambda函数使用fillna方法先向前(ffill)填充分组中的np.nan值,
# 如果某一分组中的第一行为np.nan,则之后再向后(bfill)填充。


# 对每个id分组,执行apply操作,运行数据处理函数,实现功能
def trans(df):
    df = df.groupby('id').apply(lambda group: group.apply(process_column))
    return df
def process_column(col):
    # 若数据列名中存在period或为a b c,将该组数据用;连接起来返回
    if 'period' in col.name or col.name in ['a','b','c']:
        return ';'.join(str(v) for v in col)
    else:
    # 其余数据直接做unique返回
        return col.unique()

相关推荐

  1. python pandas dataframe数据处理总结

    2023-12-08 01:28:04       37 阅读
  2. SQL时间处理函数总结

    2023-12-08 01:28:04       40 阅读
  3. js数据处理方法

    2023-12-08 01:28:04       17 阅读
  4. spark进行数据查询语法总结

    2023-12-08 01:28:04       24 阅读
  5. Hive函数 之 数值处理

    2023-12-08 01:28:04       19 阅读
  6. TS总结

    2023-12-08 01:28:04       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 01:28:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 01:28:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 01:28:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 01:28:04       20 阅读

热门阅读

  1. 纯C读取文件实现解析H264裸流每一帧数据

    2023-12-08 01:28:04       45 阅读
  2. Redisson

    2023-12-08 01:28:04       43 阅读
  3. 算法 拓扑序列

    2023-12-08 01:28:04       29 阅读
  4. Redis默认序列化方式乱码原因及解决办法

    2023-12-08 01:28:04       43 阅读
  5. 计算机网络——传输层

    2023-12-08 01:28:04       39 阅读
  6. python模块 — json

    2023-12-08 01:28:04       42 阅读
  7. TCP_NODELAY与TCP通信效率

    2023-12-08 01:28:04       43 阅读
  8. 【算法】合并K个升序链表

    2023-12-08 01:28:04       41 阅读
  9. Dynamo学习使用的网站

    2023-12-08 01:28:04       44 阅读
  10. 【NEON】学习资料汇总

    2023-12-08 01:28:04       44 阅读
  11. 【Centos8】配置网络镜像源

    2023-12-08 01:28:04       36 阅读