pandas df 相关应用技巧

读取数据

import pandas as pd
# 读取csv
df = pd.read_csv('./test.csv')
# 读取excel
df = pd.read_excel('E:/Code/回归/4.13_data.xlsx', sheet_name=0)
# 含行索引的df读取,这里以id列为行索引
df = pd.read_csv('./test.csv', index_col='id')
# 写入csv
df.to_csv('./test_out.csv')
# 写入excel
df.to_excel('trans_plan.xlsx', index=False, encoding='utf-8')

数据展示

# 简单查看df前三行
print(df.head(3))
# 查看df统计特征
df.describe()

数据索引

一、loc,iloc,[]

1.1 loc方法

这里行索引是规定好的列,列索引是列名。不是行列号哦!

获取行数据

# 指定行索引,获取行
print(df.loc['f'])   # 单行
print(df.loc[['a', 'f']])    # 多行
print(df.loc[1:5])  # 多行,左右均为闭区间

获取列数据

# 指定列索引,获取列
df.loc[:,'Height'].head()   # 单列索引
df.loc[:,['Height', 'Math']].head()    # 多列索引

联合索引

df.loc['a':'c','Height':'Math'].head()

函数式索引

df.loc[lambda x:x['Gender']=='M']

布尔索引

loc中能传入的只有布尔列表和索引子集构成的列表

df.loc[df['Address'].isin(['street_7', 'street_4'])]
# 或者写成
df.loc[df['Address']=='street_7' or df['Address']=='street_4']

1.2 iloc方法

这里行列索引均是行列号~ 较为常用

获取行数据

df.iloc[3] # 单行数据
df.iloc[3:5] # 多行数据,左开右闭区间

获取列数据

df.iloc[:,3]  # 单列数据
df.iloc[:,7::-2]   # 多列数据

联合索引

df.iloc[3::4,7::-2]

注:iloc中接收的参数只能为整数或整数列表或布尔列表,不能使用布尔Series,如果要用就必须如下把values拿出来

df.iloc[(df['School']=='S_1').values]

1.3 []方法

Series的操作

pd.Series(df['Math'], index=df.index)   # 定义Series
s[5]   # 单元素索引
s[0:4] # 多行索引
s[s > 80]  # 布尔索引

Dataframe的操作

df[1:2]  # 索引df的第一行   左闭右开
df['name']   # 索引df的一列
df[['School', 'Math']]  # 多列索引
df[df['Gender']=='F']   # 布尔索引
# 当bool索引有两个判断条件时,不要写and符号,要写&,不然会报错!!!
df[(df['time']>7) & (df['time']<8)] 

二、遍历技巧

for index, row in df.iterrows():
    df.loc[df[df["country"] == row['country']].index, 'name'] = 'something'

定义df

df = pd.DataFrame(columns=['A', 'B', 'C', 'D'])
df['A'] = lst_a

df排序

df.sort_values(by=['col1'])  # 按单列排序,默认升序
df.sort_values(by=['col1', 'col2'])  # 按多列排序
df.sort_values(by='col1', ascending=False)  # 降序
df.sort_values(by='col4', key=lambda col: col.str.lower())  # 含lambda函数的排序

df求和

sum_int = df['index'].sum()
sum_str = df['times'].sum()

(26条消息) pandas 对列的相关操作_pandas对列操作_冷漩的博客-CSDN博客

df数据整理

问题描述:

现在的df数据表有一列是‘加油站’,另一列是‘日期’,另一列是‘当日销量’,想要把它整理成一列代表一个加油站,一行代表一个日期,销量数据填入的格式

df.pivot_table(index='日期', columns='加油站', values='当日销量')

# 这个语句会把你的数据表按照日期和加油站进行分组,然后把当日销量填入对应的位置。

df.apply应用

1. lambda函数

df['new_column'] = df.apply(lambda x: x['column_a'], axis=1)

2. 自拟函数

2.1 返回多个值版

def func_com(row):
    return  row['A'], row['B']

result = df.apply(func_com, axis=1, result_type='expand')
df['new1'] = result[0]
df['new2'] = result[1]

2.2 需要传参版

注意参数顺序以及和row的相对顺序!

def func(row, str, address):
    return row['A']

all_df['A'] = all_df.apply(func, args=(str_new, row['A']),axis=1)

df去重

df = df.drop_duplicates('salary')

df求第几大值的函数

# 第二大
tmp_value = df['salary'].nlargest(2)
tmp_value = tmp_value.values[1]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值