pandas是python数据分析的核心工具,安装使用pip install pandas,导入为import pandas as pd。创建dataframe可从字典或csv文件读取,如pd.dataframe(data)或pd.read_csv(‘your_data.csv’)。数据选择可通过列名或条件过滤实现,如df[‘姓名’]或df[df[‘年龄’] >= 28]。数据清洗包括填充缺失值fillna()、删除缺失值dropna()和去重drop_duplicates()。类型转换用astype()函数,应用函数可用apply()方法。数据聚合与分组通过groupby()完成,如按城市计算平均年龄。处理大型数据集时,可用分块读取read_csv+chunksize、dask并行计算或优化数据类型。与sql交互可用read_sql_query读取和to_sql写入数据库。时间序列分析支持date_range创建序列、resample重采样和rolling移动窗口计算。掌握这些技巧能高效挖掘数据价值。
Pandas是python数据分析的瑞士军刀,掌握它能让你在数据世界里畅游无阻。它不仅提供了高效的数据结构,还内置了大量数据处理函数,让数据清洗、转换、分析变得轻松愉快。
Pandas的核心在于DataFrame和Series这两种数据结构。DataFrame可以看作是电子表格或SQL表,而Series则是一维的、带标签的数组。
解决方案
-
安装Pandas:
立即学习“Python免费学习笔记(深入)”;
pip install pandas
-
导入Pandas:
import pandas as pd
-
创建DataFrame:
-
从字典创建:
data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 28], '城市': ['北京', '上海', '深圳']} df = pd.DataFrame(data) print(df)
-
从csv文件读取:
df = pd.read_csv('your_data.csv') # 假设你的数据文件名为your_data.csv print(df.head()) # 查看前几行数据
-
-
数据选择与过滤:
-
选择列:
names = df['姓名'] # 选择'姓名'列 print(names)
-
按条件过滤:
adults = df[df['年龄'] >= 28] # 选择年龄大于等于28岁的人 print(adults)
-
-
数据清洗:
-
处理缺失值:
# 填充缺失值 df_filled = df.fillna(0) # 用0填充所有缺失值 df_filled_mean = df.fillna(df.mean(numeric_only=True)) # 用均值填充数值列的缺失值 # 删除包含缺失值的行 df_dropna = df.dropna()
-
删除重复值:
df_deduplicated = df.drop_duplicates()
-
-
数据转换:
-
类型转换:
df['年龄'] = df['年龄'].astype(int) # 将'年龄'列转换为整数类型
-
应用函数:
def add_prefix(name): return 'Mr./Ms. ' + name df['姓名'] = df['姓名'].apply(add_prefix) # 给'姓名'列的每个值添加前缀 print(df)
-
-
数据聚合与分组:
# 按城市分组,计算平均年龄 grouped = df.groupby('城市')['年龄'].mean() print(grouped)
如何高效地处理大型数据集?
当数据集变得庞大时,Pandas的处理速度可能会下降。这时,可以考虑以下策略:
-
分块读取: 使用pd.read_csv的chunksize参数,将大文件分成小块读取。
for chunk in pd.read_csv('large_data.csv', chunksize=10000): # 处理每个数据块 process_chunk(chunk)
-
使用Dask: Dask是一个并行计算库,可以与Pandas无缝集成,加速数据处理。
import dask.dataframe as dd ddf = dd.read_csv('large_data.csv') result = ddf.groupby('城市')['年龄'].mean().compute() # 使用compute()触发计算 print(result)
-
优化数据类型: 确保DataFrame使用合适的数据类型,例如将字符串类型转换为category类型可以节省内存。
df['城市'] = df['城市'].astype('category')
Pandas DataFrame与SQL数据库的交互技巧
Pandas可以方便地与SQL数据库进行交互,让你在Python中直接操作数据库数据。
-
读取SQL数据:
import sqlite3 conn = sqlite3.connect('your_database.db') query = "SELECT * FROM your_table" df = pd.read_sql_query(query, conn) conn.close() print(df.head())
-
写入DataFrame到SQL:
import sqlite3 from sqlalchemy import create_engine #方法一:使用sqlite3 conn = sqlite3.connect('your_database.db') df.to_sql('new_table', conn, if_exists='replace', index=False) # if_exists参数控制如何处理已存在的表 conn.close() #方法二:使用sqlalchemy engine = create_engine('sqlite:///your_database.db') df.to_sql('new_table', engine, if_exists='replace', index=False) engine.dispose()
如何利用Pandas进行时间序列分析?
Pandas对时间序列数据提供了强大的支持,可以方便地进行时间序列分析。
-
创建时间序列:
dates = pd.date_range('2023-01-01', periods=100, freq='D') # 创建一个从2023-01-01开始,长度为100天的时间序列 ts = pd.Series(range(100), index=dates) print(ts.head())
-
重采样:
# 将数据按月重采样,并计算平均值 monthly_mean = ts.resample('M').mean() print(monthly_mean)
-
移动窗口:
# 计算7天移动平均 rolling_mean = ts.rolling(window=7).mean() print(rolling_mean.head(10))
掌握这些技巧,你就能在Python中利用Pandas轻松驾驭数据,挖掘出有价值的信息。