6-pandas数据读取


前言


一、分组聚合

1.groupby使用:

groupby() 是 pandas 库中用于对数据进行分组操作的一个非常重要的方法。

python 复制代码
import pandas as pd

data = {'城市': ['北京', '上海', '广州', '北京', '上海', '广州'],
        '人口': [2154, 2424, 1303, 2154, 2424, 1303],
        '年龄': [25, 30, 35, 25, 30, 35],
        '收入': [5000, 6000, 7000, 5000, 6000, 7000]}

df2 = pd.DataFrame(data)

# 计算每个城市的平均年龄 
df2.groupby('城市')['年龄'].mean()

# 每个城市的平均收入
df2.groupby('城市')['收入'].mean()

# 计算每个城市的总人口
df2.groupby('城市')['人口'].sum()

2. agg方法:

(1)单个函数聚合----如果你只想对某一列应用一个函数,可以直接传递该函数的名字或函数对象给 agg 方法:

eg:agg({'金额': 'sum'})

(2)多个函数聚合----如果你想对某一列应用多个函数,可以传递一个列表给 agg 方法。

eg:agg({'金额': ['sum', 'mean']})

(3)不同的列不同函数----如果你希望对不同的列应用不同的聚合函数,可以在 agg 方法中传入一个字典,字典的键是列名,值是函数或函数列表。

eg:agg({'金额': 'sum', '订单号': 'count'})

python 复制代码
data = {
    'UserId': [101, 102, 103, 104, 105],
    'Date': ['2023-10-01', '2023-10-01', '2023-10-02', '2023-10-03', '2023-10-03'],
    'Product': ['笔记本', '鼠标', '键盘', '笔记本', '显示器'],
    'Quantity': [2, 5, 3, 1, 2],
    'Amount': [2000, 50, 150, 1000, 400]
}
df3 = pd.DataFrame(data)

# 每个产品的销售总额和销售量
df3.groupby('Product').agg({'Amount':'sum','Quantity':'sum'})


# 每个用户下单的最早日期和最晚日期
df3.groupby('UserId')['Date'].agg(['min','max'])

二、透视表pivot_table()

透视表用来进行数据汇总和分析

1.引入库

代码如下(示例):

python 复制代码
data = {
    '订单日期': pd.date_range(start='2023-01-01', periods=12, freq='M'),
    '产品类别': ['电子产品', '家居用品', '服装', '电子产品', '家居用品', '服装', '电子产品', '家居用品', '服装', '电子产品', '家居用品', '服装'],
    '销售额': [5000, 3000, 2000, 5500, 3200, 2200, 6000, 3500, 2300, 5200, 3100, 2100]
}
df4 = pd.DataFrame(data)


# 统计每个月不同产品的销售额
import numpy as np

pd.pivot_table(df4,values='销售额',columns='产品类别',index=df4['订单日期'].dt.strftime('%Y %m'),aggfunc=np.sum,fill_value=0)

2.提取日期dt.strftime()

获取年月

代码如下(示例):

df4['订单日期'].dt.strftime('%Y %m')

3.

三、文件读取

1.read_csv

pd.read_csv(r'C:\Users\B\Desktop\数据源\exa5.csv',encoding='ANSI')

pd.read_csv(r'C:\Users\B\Desktop\数据源\exa5.csv',encoding='gbk') # encoding='gbk'设置编码方式

path = r'C:\Users\B\Desktop\数据源\exa5.csv'

pd.read_csv(path,sep='\t',encoding='gbk')

(1)表头设置header

pd.read_csv(path,header=0,encoding='gbk')

(2)设置索引列index_col

pd.read_csv(path,index_col=0,encoding='gbk') # 设置列名下标为0的列,作为索引列

pd.read_csv(path,index_col='股票2',encoding='gbk')

(3)使用哪些列use_cols

pd.read_csv(path,usecols=[0,4,5],encoding='gbk')

(4)日期转换parse_dates

df6 = pd.read_csv(path,parse_dates=['日期'],encoding='gbk')

2.读取文本内容read_table

df8 = pd.read_table(r'C:\Users\B\Desktop\数据源\exa2.txt',sep='\s+') # sep='\s+' 凡是有空格的地方就分割

3.大文件读取

chunksize=1000设置块的大小

python 复制代码
df9 = pd.read_csv(r'C:\Users\B\Desktop\数据源\exa5.csv',chunksize=1000,encoding='gbk') # chunksize=1000设置块的大小
data = pd.DataFrame([])
for chunk in df9:
    chunk = pd.DataFrame(chunk)
    data = pd.concat([data,chunk])

4.Excel文件读取read_excel

python 复制代码
# excel工作薄里有多张表时,要使用sheet_name读取指定表
df10 = pd.read_excel(r'C:\Users\B\Desktop\数据源\exa10.xlsx',sheet_name='股票')

df11 = pd.read_excel(r'C:\Users\B\Desktop\数据源\exa10.xlsx',sheet_name='评论')

5.html数据读取read_html

df11 = pd.read_html('https://www.air-level.com/rank')[0]

df12 = pd.read_html('https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml')[0]

python 复制代码
lst = []
for i in range(1,3):
    url = f'https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml?p={i}'
    df = pd.read_html(url)[0]
    lst.append(df)
data = pd.concat(lst,ignore_index=True)

四、文件保存

保存为csv格式 to_csv

df7.to_csv('test.csv')

df7.to_excel('test2.xls')

df7.to_excel('test2.xlsx',index=False)

data.to_html('hehe.html')

五、拓展

1.内容提取str.extract()

通过正则提取字母

python 复制代码
data = {'info': ['John 25', 'Lucy 30', 'Bob 28']}
df7 = pd.DataFrame(data)


df7['name'] = df7['info'].str.extract(r'(\w+)')

2.str属性

python 复制代码
data = {'姓名': ['lily Smith', 'lucy Johnson', 'jack Brown', 'tom Lee'],
        '入职日期': ['2022-05-15', '2020-10-01', '2019-07-20', '2023-03-10']}
df = pd.DataFrame(data)

# 提取【姓名】里的名
df['姓名'].str.split(' ')[0]


#结果['lily', 'Smith']

df['姓名'].str.split(' ').str[0]  # 批量定位到单元格内部,通过下标取值


'''
结果
0    lily
1    lucy
2    jack
3     tom
Name: 姓名, dtype: object
'''


# 提取入职年份
df['入职日期'].str[:4]

总结

相关推荐
仙俊红7 小时前
学习笔记:使用 pandas 和 Seaborn 绘制柱状图
笔记·学习·pandas
白雪公主的后妈15 小时前
数据的高级处理——pandas模块进阶——使用Python进行数据分析
开发语言·python·学习·数据分析·pandas·tushare
科雷软件测试15 小时前
python数据分析:使用pandas库读取和编辑Excel表
python·数据分析·pandas
背太阳的牧羊人20 小时前
df.replace({‘b‘: r‘\s*(\.)\s*‘}, {‘b‘: r‘\1ty‘}, regex=True)
开发语言·正则表达式·pandas
赛丽曼1 天前
Pandas-数据透视表
pandas
Lx3523 天前
Pandas时间序列处理:日期与时间
后端·python·pandas
白雪公主的后妈4 天前
数据的简单处理——pandas模块——读取数据(Excel和csv格式)
开发语言·python·学习·excel·pandas
白雪公主的后妈5 天前
数据的简单处理——pandas模块——数据结构(Series和DataFrame对象)
开发语言·数据结构·python·学习·pandas
白雪公主的后妈5 天前
数据的简单处理——pandas模块——选择数据
开发语言·python·学习·pandas