首页  

python pandas 使用技巧     所属分类 python 浏览量 204
import pandas as pd  
  
df = pd.DataFrame({  
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],  
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],  
    'C': [1, 2, 3, 4, 5, 6, 7, 8],  
    'D': [10, 20, 30, 20, 15, 30, 45, 50]  
})  

df.dtypes 返回所有列的数据类型 (不包含索引列)


print(df.info())


value_counts()
返回列或pandas Series中所有唯一值的数量
df['A'].value_counts()


unique()
返回列或pandas Series中所有唯一值
df['A'].unique()

nunique() 返回列或pandas Series中唯一值的数量
df['A'].nunique()


df.sample(3)
随机返回3行


s1 = pd.date_range(start='2024-05-01',periods=7,freq='D')


df['rise20'] = (df['close'] - df['close'].shift(20)) * 100 / (df['close'].shift(20))



# 选择A列值为'foo'且B列值为'one'的行  
dfb = df.loc[(df['A'] == 'foo') & (df['B'] == 'one')]  
print(dfb)

df['E'] = [None,None,1,2,3,4,5,6]
print(df)
# 删除包含缺失值的行
df2 = df.dropna()  
print(df2)
# 删除包含缺失值的列  axis=1
df3 = df.dropna(axis=1)  
print(df3)

# apply + lambda表达式  
df['E2'] = df['E'].apply(lambda x: x * 2) 
print(df)

df['D_plus_E'] = df['D'] + df['E'] 
print(df)

# 按列B的值分组,并计算列C的平均值  
grouped = df.groupby('B')['C'].mean()  
print(grouped)


df['A_lower'] = df['A'].str.lower()  
print(df)

df2 = df[df['A'].str.startswith('fo')]
print(df2)


df['date']=['2020-01-01','2020-01-06','2022-06-01','2023-09-01','2024-01-01','2024-02-01','2024-03-01','2024-04-01']
df['dt'] = pd.to_datetime(df['date'])  
  
# 按年分组,并计算每年的行数  
grouped_by_year = df.groupby(df['date'].dt.year).size()  
print(grouped_by_year)

# 按索引排序,并设置为倒序  
df_sorted = df.sort_index(ascending=False)  
print(df_sorted)


pd.read_csv(), pd.read_excel(), pd.read_sql_query() df.to_csv(), df.to_excel(), df.to_sql() astype() 更改数据类型 df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [4.0, 5.0, 6.0] }) # A列 转换为浮点数,列 B 转换为整数(会丢失精度) df = df.astype({'A': float, 'B': int}) # 输出列的数据类型 print(df.dtypes) replace() 替换值 # 替换 A 列中的 1 为 10,但不修改原 DataFrame new_df = df['A'].replace(1, 10) # 使用字典替换 A 列中的值 df['A'].replace({0: 'zero', 4: 'four'}, inplace=True) 数据重塑 pivot() 数据 stack() 和 unstack() 在多层索引之间转换 字符串操作 .str.contains(), .str.replace(), .str.lower(), .str.split() resample() 对时间序列数据进行重采样 import numpy as np periods=48 # 创建 时间索引 idx = pd.date_range('2023-01-01', periods=periods, freq='H') data = {'A': np.random.rand(periods), 'B': np.random.rand(periods)} df = pd.DataFrame(data, index=idx) print(df) # 将数据重新采样 按天 ,计算每列的平均值 daily_avg = df.resample('D').mean() print(daily_avg) .dt 获取日期和时间的各个部分(如年、月、日、小时等) 合并与连接 merge() 合并两个 DataFrame concat() 连接多个 DataFrame join() 在索引上进行连接 性能优化 apply() 时,尽量使用矢量化操作替代循环 数据探索 info() 查看 DataFrame 的基本信息 describe() 查看数值列的统计摘要 head() 和 tail() 查看数据的前几行或后几行
pandas常用api isnull() shape() (列,行数) groupby ()(分组) unique 和 nunique (统计) idxmax 和 argmax idxmin argmin idxmax: 获取最大值的键 argmax: 获取最大值的下标 reset_index 和 set_index sort_values (分组后排序) value_counts() (统计不同值个数) get_dummies (one-hot) cut (分组打标签) replace (替换) .loc (行:列) pd.to_numeric merge (合并数据集) pivot_table (数据透视表) drop_duplicates (去重) describe (统计摘要函数) df.groupby('xx')['yy'].sum() 对xx字段进行分组,然后按照yy进行求和 count() => 计数 size() => 频率统计 mean() =>平均值 median() =>中位数 std()/var() => 标准差/方差 min()/max() =>最小值/最大值 sum() =>求和
# 重命名列 hs300df.columns=["time","hs300"] hs300etfdf.columns=["time","hs300etf"] # 根据时间字段 合并 join df = pd.merge(hs300df,hs300etfdf,how='inner',on='time')
沪深300指数和沪深300ETF 对比分析 使用pandas分析沪深300指数行业权重 pandas dataframe merge pandas pivot_table 数据透视表 pandas matplot 画图 超出阈值 变颜色 pandas matplot 读取日线数据,滚动计算bias250 添加阈值线 沪深300 线性回归画趋势线 pandas 计算 布林通道 和 唐奇通道 pandas 股票指数技术分析 pandas dataframe 计算收益率 多个ETF行情数据join,协方差 相关系数计算 zscore因子计算及策略回测 沪深300指数 bias250 z20 z250 分析 聚宽 沪深300指数 数据读取分析

上一篇     下一篇
pandas read_csv 和 to_csv 索引问题

大模型简介

国内大模型

pandas dataframe merge

pandas pivot_table 数据透视表

numpy 实用代码