花姐来也! 各位看官老爷们,今天咱们就来聊聊Python界的大熊猫------Pandas! 别看它名字萌萌哒,功能可是杠杠的!保证让你看完这篇文章,也变成Pandas高手!
1. 总览
Pandas,一个强大的数据分析和处理工具,就像一位全能管家,能帮你轻松搞定各种数据问题。无论是数据清洗、转换,还是分析、可视化,它都能手到擒来。
2. Pandas有关库
Pandas主要依赖于NumPy,就像盖房子需要钢筋水泥一样。NumPy提供了高效的数组运算能力,让Pandas在处理大量数据时也能保持飞一般的速度。
3. 调用Pandas库
python
import pandas as pd
import numpy as np # 顺手也把NumPy导入了,后面要用到
细节: pandas 行业内默认用pd缩写,numpy默认用np缩写,所以在写项目时尽量用行业内默认值,这样便于后期的代码可读性和可维护性。
4. Pandas的数据结构
Pandas有两种主要的数据结构:Series和DataFrame。
- Series: 就像一维数组,带标签的数组,每个元素都有一个对应的索引。你可以把它想象成一列数据,比如一个班级学生的成绩。
- DataFrame: 就像一张表格,由多个Series组成,每个Series代表一列数据。你可以把它想象成一个Excel表格,有行有列,非常方便。
5. 调用/读取数据
Pandas支持多种数据格式的读取,比如CSV、Excel、JSON、SQL、HTML等。
- CSV:
python
df = pd.read_csv('data.csv')
- Excel:
python
df = pd.read_excel('data.xlsx')
- 其他(JSON、SQL、HTML):
python
df = pd.read_json('data.json')
df = pd.read_sql('SELECT * FROM table', connection)
df = pd.read_html('data.html')
细节: 读取CSV文件时,如果遇到编码问题,可以尝试指定encoding
参数,比如encoding='gbk'
或encoding='utf-8'
。
6. 数据存储
python
df.to_csv('output.csv', index=False) # index=False表示不保存索引列
df.to_excel('output.xlsx', index=False)
7. 创建测试对象
python
data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 28]}
df = pd.DataFrame(data)
print(df) # 打印结果
-------------------
name age
0 Alice 25
1 Bob 30
2 Charlie 28
8. 统计数据函数
python
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]}
df = pd.DataFrame(data)
# df.info():查看DataFrame的基本信息
print(df.info())
# df.shape:查看DataFrame的行数和列数
print(df.shape)
# df.index:查看DataFrame的索引
print(df.index)
# df.columns:查看DataFrame的列名
print(df.columns)
# df.sum():计算每列的总和
print(df.sum())
# df.min():计算每列的最小值
print(df.min())
# df.max():计算每列的最大值
print(df.max())
# df.idxmin():返回每列最小值对应的索引
print(df.idxmin())
# df.idxmax():返回每列最大值对应的索引
print(df.idxmax())
# df.describe():生成每列的统计摘要
print(df.describe())
# df.mean():计算每列的均值
print(df.mean())
# df.median():计算每列的中位数
print(df.median())
# df.quantile([0.25, 0.75]):计算每列的四分位数
print(df.quantile([0.25, 0.75]))
# df.var():计算每列的方差
print(df.var())
# df.std():计算每列的标准差
print(df.std())
# df.cummax():计算每列的累计最大值
print(df.cummax())
# df.cummin():计算每列的累计最小值
print(df.cummin())
# df['C'].cumprod():计算C列的累计乘积
print(df['C'].cumprod())
# len(df):计算DataFrame的行数
print(len(df))
# df.isnull():检查DataFrame中的空值
print(df.isnull())
# df.corr():计算DataFrame中各列之间的相关性
print(df.corr())
细节: df.describe()
函数非常强大,可以快速了解数据的整体分布情况。
9. Pandas中的选择和过滤
python
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'age': [25, 30, 28, 35, 22],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou']}
df = pd.DataFrame(data)
# series['index']:选择Series中指定索引的元素
print(df['name'][0])
# df.loc[n:n]:选择DataFrame中指定行范围的数据
print(df.loc[1:3])
# df['columnName']:选择DataFrame中指定列的数据
print(df['age'])
# df['columnName'][n]:选择DataFrame中指定列和行的数据
print(df['city'][2])
# df['columnName'].nunique():计算指定列的唯一值数量
print(df['city'].nunique())
# df['columnName'].unique():返回指定列的唯一值
print(df['city'].unique())
# df.columnName:选择DataFrame中指定列的数据(另一种写法)
print(df.age)
# df['columnName'].value_counts(dropna=False):计算指定列中每个值的出现次数
print(df['city'].value_counts())
# df.head(n):返回DataFrame的前n行
print(df.head(3))
# df.tail(n):返回DataFrame的后n行
print(df.tail(2))
# df.sample(n):随机返回DataFrame的n行
print(df.sample(3))
# df.sample(frac=0.5):随机返回DataFrame的50%行
print(df.sample(frac=0.5))
# df.nlargest(n, 'columnName'):返回指定列中最大的n行
print(df.nlargest(2, 'age'))
# df.nsmallest(n, 'columnName'):返回指定列中最小的n行
print(df.nsmallest(2, 'age'))
# df[df.columnName < n]:返回指定列中小于n的行
print(df[df.age < 30])
# df[['columnName', 'columnName']]:选择DataFrame中指定的多个列
print(df[['name', 'city']])
# df.loc[:, "columnName1":"columnName2"]:选择DataFrame中指定列范围的数据
print(df.loc[:, 'age':'city'])
# Create Filter:创建过滤器
filter = df['age'] > 25
print(df[filter])
# df.filter(regex='e'):使用正则表达式过滤列名
print(df.filter(regex='e'))
# np.logical_and:使用NumPy的逻辑与
print(df[np.logical_and(df['age'] > 25, df['city'] == 'Shanghai')])
# Filtering with &:使用&进行过滤
print(df[(df['age'] > 25) & (df['city'] == 'Shanghai')])
细节: df.loc
和df.iloc
的区别:df.loc
使用标签(行名和列名)选择数据,而 df.iloc
使用整数位置(行号和列号)选择数据。
10. 数据排序
python
import pandas as pd
# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 28]}
df = pd.DataFrame(data)
# df.sort_values('columnName'):按指定列的值进行排序
print(df.sort_values('age'))
# df.sort_values('columnName', ascending=False):按指定列的值进行降序排序
print(df.sort_values('age', ascending=False))
# df.sort_index():按索引进行排序
df = df.set_index('name') #将name设置为索引
print(df.sort_index())
11. 重命名列、定义新的列、修改列
python
import pandas as pd
# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 28]}
df = pd.DataFrame(data)
# df.rename(columns={'columnName': 'newColumnName'}):重命名列名
print(df.rename(columns={'name': '姓名'}))
# 定义新列:df['newColumn'] = [1, 2, 3]
df['gender'] = ['F', 'M', 'M']
print(df)
# 改变索引名称:df.index = ['a', 'b', 'c']
df.index = ['a', 'b', 'c']
print(df)
# 所有列名变小写字母:df.columns = df.columns.str.lower()
df.columns = ['Name', 'Age', 'Gender']
df.columns = df.columns.str.lower()
print(df)
# 所有列名变大写字母:df.columns = df.columns.str.upper()
df.columns = df.columns.str.upper()
print(df)
12. 数据删除
python
import pandas as pd
# 创建一个示例DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 28]}
df = pd.DataFrame(data)
# df.drop(columns=['columnName']):删除指定列
print(df.drop(columns=['age']))
# Series.drop(['index']):删除Series中指定的索引
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print(s.drop(['b']))
# 删除指定行:df.drop([0, 1])
print(df.drop([0, 1]))
# 删除一个变量:del df['columnName']
del df['age']
print(df)
13. 数据类型转换
python
import pandas as pd
# 创建一个示例DataFrame
data = {'age': ['25', '30', '28']}
df = pd.DataFrame(data)
# df.dtypes:查看DataFrame中每列的数据类型
print(df.dtypes)
# df['columnName'] = df['columnName'].astype('dataType'):转换指定列的数据类型
df['age'] = df['age'].astype(int)
print(df.dtypes)
# pd.melt(frame=dataFrameName, id_vars='columnName', value_vars=['columnName']):将DataFrame从宽格式转换为长格式
data = {'day': ['Mon', 'Tue', 'Wed'],
'city': ['Beijing', 'Shanghai', 'Guangzhou'],
'temperature': [25, 30, 28]}
df = pd.DataFrame(data)
print(pd.melt(df, id_vars='day', value_vars=['city', 'temperature']))
14. Apply函数
python
import pandas as pd
# 创建一个示例DataFrame
data = {'age': [25, 30, 28]}
df = pd.DataFrame(data)
# Method1:使用lambda函数
df['age_plus_10'] = df['age'].apply(lambda x: x + 10)
print(df)
# Method2:自定义函数
def add_10(x):
return x + 10
df['age_plus_10_v2'] = df['age'].apply(add_10)
print(df)
怎么样,各位看官老爷们,是不是感觉Pandas也没有想象中那么难? 其实,只要你多敲代码,多练习,就能熟练掌握Pandas的各种技巧。 相信我,当你熟练掌握Pandas之后,你会发现处理数据就像玩游戏一样轻松愉快!
最后,别忘了点赞、转发、收藏哦! 咱们下期再见!