原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。
文章目录
前言
Pandas 是一个 Python 数据分析库,提供了强大的数据处理和分析功能,包括数据读取、清洗、转换、合并、分析、统计和可视化等。
需要练习pandas相关功能。可以在这个网址:教你如何使用Pandas做数据分析
一、Pandas 的常见功能
1.读取和保存数据:Pandas 可以读取多种格式的文件,如 CSV、Excel、JSON 等,并将其转换成 DataFrame 对象进行操作。可以使用 read_csv()、read_excel()、read_json() 等方法来读取数据,使用 to_csv()、to_excel()、to_json() 等方法来保存数据。
2.数据选择和操作:Pandas 可以使用不同的索引方式选择数据,如整数索引、标签索引等。DataFrame 对象支持多种常见的操作,如过滤、排序、聚合等。可以使用 loc[]、iloc[]、isin()、sort_values()、groupby() 等方法来进行操作。
3.数据清洗和转换:Pandas 可以处理缺失值、重复值、异常值等数据清洗任务。可以使用 dropna()、fillna()、drop_duplicates() 等方法来清洗数据。可以使用 apply()、map() 等方法对数据进行转换。
4.数据可视化:Pandas 可以使用常见的数据可视化库(如 Matplotlib、Seaborn)来可视化数据。可以使用 DataFrame 的 plot() 方法来绘制图表。
5.时间序列分析:Pandas 支持时间序列数据处理和分析,如时间戳转换、日期范围生成、时间移动、时间重采样等。可以使用 to_datetime()、date_range()、shift()、resample() 等方法来处理时间序列数据。
6.其他功能:Pandas 还包括一些其他有用的功能,如合并、连接、透视表等。可以使用 concat()、merge()、pivot_table() 等方法来完成这些任务。
二、Pandas 的基本操作
1.导入 Pandas 库
import pandas as pd
2.读入数据文件
data = pd.read_csv('filename.csv')
3.查看数据
data.head() # 查看前五行
data.tail() # 查看后五行
data.info() # 查看数据信息
data.describe() # 查看数据统计信息
4.选择列和行
-
指定行列
data['column'] # 选择指定列
-
loc[]:通过标签选择数据
data.loc['A'] # 选择指定行,index为a data.loc['A', 'column'] # 选择指定行和列,index为a,column为column data.loc[['A','B'], '年龄'] # 选择指定多行和列
-
iloc[]:通过位置选择数据
data.iloc[0] # 选择指定行 data.iloc[0,1] # 选择指定行和列 data.iloc[0:10, 1] # 选择指定多行和列
5.过滤数据
data[data['column'] > 0] # 根据条件过滤数据
query_result = df[df['name'].str.contains('a')] # 使用str.contains()方法查询name列包含字母"a"的行
query_result = df[(df['color'] == 'orange') & (df['price'] < 1.0)] # 多条件查询示例:&与,|或
data.sort_index(axis=1,ascending=False) # 按照索引排序
data.sort_values(['A','B'],ascending=False) # 按照值排序
6.修改数据
data['new_column'] = data['column1'] + data['column2'] # 添加新列
data.drop(columns=['column']) # 删除指定列
7.合并数据
pd.concat([data1, data2]) # 沿行或列方向合并数据
data1.merge(data2, on='column', how='inner') # 按指定列合并数据
8.统计数据
data['column'].mean() # 求平均值
data['column'].sum() # 求和
data['column'].max() # 求最大值
data['column'].min() # 求最小值
9.可视化数据
import matplotlib.pyplot as plt
data['column'].plot(kind='hist') # 绘制直方图
data.plot(kind='scatter', x='column1', y='column2') # 绘制散点图
三、pandas的进阶
1.创建:字典、列表、文件、数据库
示例:创建空dataframe
import pandas as pd
df = pd.DataFrame()
print(df)
示例:使用字典创建DataFrame
import pandas as pd
data = {'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [20, 23, 25, 28],
'性别': ['女', '男', '女', '男']}
df = pd.DataFrame(data,index=['A', 'B', 'C', 'D'])
print(df)
示例:使用列表创建DataFrame1
import pandas as pd
names = ['张三', '李四', '王五', '赵六']
scores = [80, 90, 70, 85]
df = pd.DataFrame({'姓名': names, '成绩': scores})
print(df)
示例:使用列表创建DataFrame2
import pandas as pd
data = [['张三', 20], ['李四', 25], ['王五', 30]]
df = pd.DataFrame(data, columns=['姓名', '年龄'])
print(df)
示例:从文件创建DataFrame
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
示例:从数据库中创建DataFrame
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://username:password@localhost/mydatabase')
df = pd.read_sql('SELECT * FROM mytable', engine)
print(df)
需要替换username、password和mydatabase为相应的值,并且需要安装sqlalchemy和pymysql库。
2.遍历:apply、iterrows、itertuples、for
示例:使用apply方法遍历
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# 使用apply方法遍历行
def process_row(row):
return row['name'] + ' is ' + str(row['age']) + ' years old and is ' + row['gender']
df['summary'] = df.apply(process_row, axis=1)
print(df['summary'])
# 使用apply方法遍历列
def process_column(col):
return col + ' is a column in the dataframe'
df = df.apply(process_column)
print(df)
# 遍历生成多行
df[['First Name', 'Last Name']] = df['Name'].str.split(',', expand=True)
示例:使用iterrows和itertuples方法遍历行(比apply更高效)
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
# iterrows遍历行
for index, row in df.iterrows():
print(index, row['name'], row['age'], row['gender'])
# itertuples遍历列
for row in df.itertuples():
print(row.Index, row.name, row.age, row.gender)
示例:使用for循环遍历
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
for index, row in df.iterrows():
print(row['name'], row['age'], row['gender'])
# 使用for循环遍历列
for col in df.columns:
print(df[col])
3.修改:lambda匿名函数
data['country'] = data.apply(lambda x: 1 if x.countryName == x.provinceName else 0,axis=1)
其中通过apply遍历,横向(axis=1)一条数据满足provinceName和countryName相等时,新增country列数据为1,否则为0
4.pandas新增一条数据
我们可以使用 loc
方法新增一条数据。假设我们有一个名为 df
的 DataFrame,想要新增一条数据,可以按照以下步骤进行:
- 创建一个字典,键为列名,值为新数据。
- 使用
loc
方法,在最后一行新增一条数据。
以下是一个例子:
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Cathy'],
'age': [25, 30, 35]
})
# 新增一条数据
new_data = {'name': 'David', 'age': 28}
df.loc[len(df)] = new_data
print(df)
输出结果为:
name age
0 Alice 25
1 Bob 30
2 Cathy 35
3 David 28
以上是 Pandas 的基本用法,根据具体需求,还可以使用一些高级功能和技巧进行数据处理和分析。