无权限

Derrick博客站

【Pandas】数据处理核心操作

一、日期数据处理初识

1、将字符串字段转换为日期类型

相关代码:新字段 = pd.to_datetime( 原来字段)

import pandas as pd

df = pd.DataFrame({"gmv":[100,200,300,400],"trade_date":["2025-01-06","2023-10-31","2023-12-31","2023-01-05"]})
print(df.dtypes)

print("-"*20)
df["trade_date"] = pd.to_datetime(df["trade_date"])
print(df.dtypes)
【运行结果】
图片#268px #192px #B

2、获取日期数据

import pandas as pd

df = pd.DataFrame({"gmv":[100,200,300,400],"trade_date":["2025-01-06","2023-10-31","2023-12-31","2023-01-05"]})
df["trade_date"] = pd.to_datetime(df["trade_date"])

# 获取年月日
df["yy"],df["mm"],df["dd"] = df["trade_date"].dt.year,df["trade_date"].dt.month,df["trade_date"].dt.day

# 获取星期
df["week"] = df["trade_date"].dt.day_name()

# 获取日期所在季度
df["quarter"] = df["trade_date"].dt.quarter

# 判断日期是否月底年底
df["mend"] = df["trade_date"].dt.is_month_end
df["yend"] = df["trade_date"].dt.is_year_end

df
【运行结果】
图片#496px #153px #B

 

3、to_period()获取统计周期

  • "A" 或 "Y":按年周期,如 2024-07-20 会转换为 2024 。

  • "M":按月周期,像 2024-05-15 会转换为 2024-05。

  • "Q":按季度周期,一年分为四个季度,日期会转换到对应的季度周期,例如 2024Q2 。

  • "W":按周周期,通常以周日作为一周的结束,比如日期落在某一周内,就会转换为该周的周期表示。

    import pandas as pd
    
    df = pd.DataFrame({"gmv":[100,200,300,400],"trade_date":["2025-01-06","2023-10-31","2023-12-31","2023-01-05"]})
    df["trade_date"] = pd.to_datetime(df["trade_date"])
    
    df["ystat"] = df["trade_date"].dt.to_period("Y")
    df["mstat"] = df["trade_date"].dt.to_period("M")
    df["qstat"] = df["trade_date"].dt.to_period("Q")
    df["wstat"] = df["trade_date"].dt.to_period("W")
    
    df

    【运行结果】
    图片#507px #162px #B

 

二、DataFrame数据分析入门

1、查看部分数据

1)通过head()、tail()获取前n行或后n行

print(df.head(5))
print(df.tail(5))

2)获取一列数据

df_date_series = df["date"] # 返回的是Series
df_date_dataframe = df[["date"]] # 返回的是DataFrame

3)获取多列数据

df[["date","precipitation"]]

4)按行获取数据

import pandas as pd

df = pd.read_csv('data/weather.csv')

#获取行标签为1的数据
print(df.loc[1])

#获取行标签分别为1、10、100的数据
print(df.loc[[1,10,100]])

#获取行位置为0的数据
print(df.iloc[0])

#获取行位置为最后一位的数据
print(df.iloc[-1])

5)按指定行与列获取数据

import pandas as pd

df = pd.read_csv('data/weather.csv')

# 获取行标签为1,列标签为precipitation的数据
df.loc[1,["precipitation"]]

# 获取所有行,列位置为3,5,最后一位的数据
df.iloc[:,[3,5,-1]]

# 获取前10行,列位置为2、3、4、5的数据
df.iloc[:10,[2,3,4,5]]

2、分组聚合计算

语法1:df.groupby("分组字段")["要聚合的字段"].聚合函数()
语法2:df.groupby(["分组字段", "分组字段2", ...])[["要聚合的字段", "要聚合的字段2", ...]].聚合函数()

  • 案例1:将数据按月分组,并统计最大温度和最小温度的平均值

    import pandas as pd
    
    df = pd.read_csv('data/weather.csv')
    
    df["month"] = pd.to_datetime(df["date"]).dt.to_period("M")
    df.groupby("month")[["temp_max","temp_min"]].mean()

 

  • 案例2:分组频数计算——统计每个月不同天气状况的数量。

    import pandas as pd
    
    df = pd.read_csv('data/weather.csv')
    
    df.groupby("month")["weather"].nunique()

3、基本绘图

plot():pandas 提供的绘图方法,它基于 matplotlib 库,默认情况下会绘制折线图,kind='bar'是柱状图

import pandas as pd

df = pd.read_csv('data/weather.csv')

df["month"] = pd.to_datetime(df["date"]).dt.to_period("M")
df.groupby("month")[["temp_max","temp_min"]].mean().plot()

图片#513px #418px #B

 

4、常见统计值

# 查看常用统计信息
df.describe()

# 行列转置
df.describe().T

# 统计所有列
df.describe(include="all")

# 只统计数据类型为float64的列
df.describe(include=["float64"])

5、常用排序方法

import pandas as pd

df = pd.read_csv('data/weather.csv')
df["date"] = pd.to_datetime(df["date"])

# (1)找到最高温度最大的30天
df.nlargest(30,"temp_max")

# (2)从最高温度最大的30天中找出最低温度最小的5天
df.nlargest(30,"temp_max").nsmallest(5,"temp_min")

# (3)找出每年的最高温度
df["year"]=df["date"].dt.to_period("Y")
df.sort_values(by=["year","temp_max"],ascending=[True,False],inplace=True)
df.drop_duplicates(subset=["year"],inplace=True)
df

6、Pandas的数据组合函数

(1)concat连接
沿着一条轴将多个对象堆叠到一起,可通过axis参数设置沿哪一条轴连接。

# series 和 DataFrame 连接

import pandas as pd

df1 = pd.DataFrame(data={"name":["zhangsan","lisi","wangwu"],"sex":["boy","boy","girl"]})
s1 = pd.Series(data=["A","B","C","D"],index=[1,2,3,4])
s2 = pd.concat([df1,s1])
print(s2)
【运行结果】
图片#237px #224px #B

 

(2)merge合并

 

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册