一、如何将一个列表转成Pandas的数据框
- 列表类型,需要指定列名columns;不指定默认 0、1、2
my_friend = [['zhangsan', 18, '男'], ['lisi', 17, '女']] df = pd.DataFrame(my_friend, columns=['unasename', 'age', 'gender']) df
- 字典,可不指定列名columns;不指定,默认字典key值;指定则为自定义
my_friend = [{ 'username': 'zhangsan', 'age': 18, 'gender': '男'}, { 'username': 'lisi', 'age': 17, 'gender': '女'}] df = pd.DataFrame(my_friend) df
username age gender 0 zhangsan 18 男 1 lisi 17 女
二、如何从一个CSV文件中读取数据到一个Pandas数据框
-
pandas read_csv() 参数
1. filepath_or_buffer: 文件路径或对象,需要读取的CSV文件的路径。 2. sep: 分隔符,默认为,。用于指定列之间的分隔符。 3. header: 默认为'infer'。用于指定行号作为列名;没有表头header=None 4. names: 默认为None。用于结果的列名列表。 5. index_col: 默认为None。列名或列号,或者列名/列号的行索引。 6. usecols: 默认为None。返回一个数据子集,该子集只包含指定的列。 7. dtype: 列的数据类型。例如,{ 'a': np.float64, 'b': np.int32}。 8. skiprows: 要跳过的行数或行号的集合;读取时忽略第1/3/5行 skiprows=[1,3,5] 9. na_values: 要识别为NaN的值的列表或集合。 10. na_filter: 默认为True。检测丢失的值标记(空值或者na_values)。 11. skip_blank_lines: 默认为True。如果为True,则跳过空行;否则它们将被识别为NaN。 12. parse_dates: 需要解析为日期的列。 13. date_parser: 用于解析日期的函数。 14. nrows: 只读取前n行;nrows = 7 只读取前7行 15. compression: 文件的压缩类型,例如:'gzip', 'bz2', 'zip', 'xz'。 16. thousands: 千位分隔符,例如:','或者 '.'。 17. decimal: 用于分隔整数和小数部分的字符,默认为'.'。 18. encoding: 文件的字符编码。utf-8;gbk 19. skipfooter: 读取跳过文件末尾的行数;读取时忽略最后两行skipfooter=2 20. comment: 识别为注释的字符。 21. error_bad_lines: 是否应该删除包含太多字段的行,默认为True。 22. warn_bad_lines: 如果找到错误的行,是否应发出警告,默认为True。
-
读取CSV, 使用默认的标题行、逗号分隔符号
df = pd.read_csv('./titanic_train.csv') df
-
读取txt, 自己指定分隔符,标题行
ratings = pd.read_csv( fpath, sep='\t', # 指定分隔符、列名 header=None, # 告诉pd文件没有表头 names=['userId','movieId','rating','timestamp'] # 自己设置标题行 )
-
读取txt, 自己指定分隔符,标题行
df = pd.read_csv( './ratings.dat', sep="::", engine='python', names='UserID::movieID::Rating::Timestamp'.split('::') )
三、如何通过pandas创建数据到mysql数据库里面
- pymysql 插入数据
import pymysql conn = pymysql.connect( host='', user='', password='', database='demo', charset='utf8' ) ratings = pd.read_sql(sql='select * from sys_user', con=conn)
- 使用sqlalchemy 插入数据
import pandas as pd from sqlalchemy import create_engine # 创建一个简单的DataFrame data = { 'name': ['John', 'Anna', 'Mike'], 'age': [28, 22, 32], 'city': ['New York', 'Paris', 'Berlin'] } df = pd.DataFrame(data) # 创建与MySQL数据库的连接 # 格式:dialect+driver://username:password@host:port/database engine = create_engine('mysql+pymysql://username:password@localhost:3306/mydatabase') # 使用to_sql函数写入数据 df.to_sql('mytable', engine, if_exists='replace', index=False)
四、如何查看一个Pandas数据框的行数和列数
import pandas as pd
# 创建一个示例DataFrame
data = {
'A': [1, 2, 3, 4],
'B': ['a', 'b', 'c', 'd'],
'C': [1.1, 2.2, 3.3, 4.4]
}
df = pd.DataFrame(data)
# 使用shape属性查看行数和列数
rows, cols = df.shape
print(f'Number of rows: {
rows}')
print(f'Number of columns: {
cols}')
五、如何查看一个Pandas数据框的列名?
# 使用columns属性查看列名
column_names = df.columns
column_names_list = list(df.columns)
print(column_names)
print(column_names_list)
Index(['A', 'B', 'C'], dtype='object')
['A', 'B', 'C']
六、如何查看一个Pandas数据框的索引?
# 使用index属性查看索引
index_values = df.index
index_list = list(df.index)
print(index_values)
print(index_list)
RangeIndex(start=0, stop=4, step=1)
[0, 1, 2, 3]
七、如何查看一个Pandas数据框的索引?
# 打印pandas的版本号
print(pd.__version__)
八、如何查看一个Pandas数据框的数据类型?
# 使用dtypes属性查看每列的数据类型
data_types = df.dtypes
print(data_types)
A int64
B object
C float64
D bool
dtype: object
九、如何查看一个Pandas数据框的数据摘要统计信息?
import pandas as pd
# 创建一个示例DataFrame
data = {
'A': [1, 2, 3, 4, 5],
'B': ['a', 'b', 'c', 'd', 'a'],
'C': [1.1, 2.2, 3.3, 4.4, 5.5]
}
df = pd.DataFrame(data)
# 使用describe方法获取数据摘要统计信息
summary = df.describe()
summary_all = df.describe(include='all')
print(summary)
print(summary_all)
A B C
count 5.000000 5 5.000000
unique NaN 4 NaN
top NaN a NaN
freq NaN 2 NaN
mean 3.000000 NaN 3.300000
std 1.581139 NaN 1.739253
min 1.000000 NaN 1.100000
25% 2.000000 NaN 2.200000
50% 3.000000 NaN 3.300000
75% 4.000000 NaN 4.400000
max 5.000000 NaN 5.500000
名称 | 解释 | 名称 | 解释 |
---|---|---|---|
count | 非空值的数量 | unique | 唯一值的数量 |
top | 出现频率最高的值 | freq | 最高频率的值出现的次数 |
mean | 平均值 | std | 标准偏差 |
min | 最小值 | 25% | 第25百分位数 |
50% | 中位数 | 75% | 第75百分位数 |
max | 最大值 |
十、如何选择一个Pandas数据框的行?
-
使用loc方法:通过标签索引选择行
df.loc[index_label]
-
使用iloc方法:通过整数位置索引选择行
df.iloc[index_position]
-
根据条件选择行:使用布尔索引
df[df['column_name'] == value]
-
使用head和tail方法:分别选择数据框的前几行和后几行
df.head(n) # 获取前n行 df.tail(n) # 获取后n行
-
使用query方法:使用查询字符串选择行
df.query("column_name == value")
-
简单示例
loc切片操作中,'y’是包含的
iloc切片操作中,结束位置是不包含的第2行 df.loc[1]) 第2至5行 df.loc[[1, 4]]) 第x到y的行 df.loc['x':'y'] 选择w和z的行,B和C的列 df.loc[['w', 'z'], ['B', 'C']] 第2行 df.iloc[1] 第2到第3行 df.iloc[1:3] 选择A列值为3的行 df[df['A'] == 3] 选择前3行 df.head(3) 选择A列值为3的行 df.query("A == 3")
选择y行A列的元素 df.loc['y', 'A']) # 输出:3 选择第三行第一列的元素 df.iloc[2, 0]) # 输出:3
十一、如何选择一个Pandas数据框的列?
- 通过列名:使用数据框名称和列名可以直接提取列
column_B = df['B']
- 通过多个列名:选择多个列,向数据框提交一个列名列表
selected_columns = df[['B', 'C']]
- 通过loc:基于行标签行和列
column_B_with_loc = df.loc[:, 'B'] column_B_with_loc = df.loc[[0, 3]:, 'B'] multiple_columns_with_loc = df.loc[:, ['B', 'C']]
- 通过iloc:根据列的整数位置选择列
first_column = df.iloc[:, 0] # This selects the first column first_two_columns = df.iloc[:, :2] # This selects the first two columns
十二、如何选择一个Pandas数据框的行和列?
import pandas as pd
data = {
'A': [1, 2, 3, 4, 5],
'B': ['a', 'b', 'c', 'd', 'e'],
'C': ['!', '@', '#', '$', '%']
}
df = pd.DataFrame(data, index=['w', 'x', 'y', 'z', 'v'])
- loc:通过标签选择行和列
# 选择目标行和目标列 cell_value = df.loc['row_label', 'column_label'] # 选择行和多列: row_subset = df.loc['row_label', ['column_label1', 'column_label2']] # 选择多行和项目列 column_subset = df.loc[['row_label1', 'row_label2'], 'column_label'] # 选择多行和多列: subset = df.loc[['row_label1', 'row_label2'], ['column_label1', 'column_label2']]
- iloc:通过整数位置选择行和列
# 选择某一行的要素列: 选择第一行第二列的数据 cell_value = df.iloc[0, 1] # 选择某一行的多列 选择前1行和前两列的数据 row_subset = df.iloc[0, 0:2] # 选择多行的项目列:选择前两行第一列 column_subset = df.iloc[0:2, 0] # 选择多行和多列:选择前两行、前两列 subset = df.iloc[0:2, 0:2]
- 双重索引:先行后列
# 使用loc选择行,然后直接使用列名选择列 data_w_B_another = df.loc['w']['B'] 等价 df.loc['w', 'B'] 更直接且效率更高 data_1_B = df.iloc[0]['B'] 等价 df.iloc[0, 'B'] 更直接且效率更高
十三、如何筛选一个Pandas数据框的行?
- 基于条件筛选:使用布尔索引来筛选满足特定条件的行
筛选A列值大于2的行 df[df['A'] > 2]
- 使用query方法
筛选A列值大于2的行 df.query("A > 2")
- 使用loc:loc可以基于行标签和列标签进行筛选,但也可以与布尔条件结合使用
df.loc[df['A'] > 2]
- 使用iloc
# 使用布尔索引确定满足条件的行位置 index_positions = df[df['A'] > 2].index # 使用iloc筛选这些行 df.iloc[index_positions]
- 基于字符串方法筛选:如果您要基于字符串列的某些特性来筛选行,可以使用str该方法
# 筛选C列值为'#'的行 df[df['C'].str.contains('#')]
十四、如何筛选一个Pandas数据框的行?
- 用途loc:loc是基于行标签和列标签进行筛选的
# 筛选A列值大于2的行,以及A和B两列 df.loc[df['A'] > 2, ['A', 'B']] df.loc[df['C'] == '@', ['A', 'B']]
- iloc是基于整数位置进行索引的
# 筛选第3和第4行,以及第1和第2列 df.iloc[2:4, 0:2] 从筛选第二行, 第二列直到最后一列 df.iloc[1, 1:]
首先,获取满足条件行的整数位置。 然后,利用这些整数位置与列的整数位置结合iloc来筛选 # 获取满足A列值大于2的行的整数位置 rows = df[df['A'] > 2].index # 获取列A和B的整数位置 cols = [df.columns.get_loc(col) for col in ['A', 'B']] # 使用iloc筛选 result = df.iloc[rows, cols] print(result)
十五、如何根据某一列的值对一个Pandas数据框进行排序?
- 根据单列排序:使用sort_values方法并指定by参数为该列的名称
# 根据A列进行升序排序 sorted_df = df.sort_values(by='A') print(sorted_df)
- 根据多列排序:将by参数设置为一个列名列表
# 首先根据A列进行升序排序,然后根据B列进行降序排序 sorted_df = df.sort_values(by=['A', 'B'], ascending=[True, False]) print(sorted_df)
- 降序排列:使用ascending参数将其设置为False。
# 根据A列进行降序排序 sorted_df = df.sort_values(by='A', ascending=False) print(sorted_df)
十六、如何对一个Pandas数据框进行透视操作?
Pandas中,使用pivot_table对数据框的方法进行透视操作。透视表是从数据框的派生出来的,它对数据进行汇总并提供多维度的分析。
以下是如何使用pivot_table对 Pandas 数据框进行透视操作的基本步骤:
-
Parameter Description index 作为透视表的行的列名称或列名称的列表。 columns 作为透视表的列的列名称或列名称的列表。 values 要聚合的列名称或列名称的列表。 aggfunc 聚合函数或函数列表,默认为 numpy.mean。可以是任何聚合函数,例如 sum, min, max, mean, std 等。 fill_value 替换结果中的缺失值的值。 margins 添加行/列小计和总计,默认为 False。 dropna 如果为 True,则删除所有项均为 NaN 的列。 margins_name margins 的名称,默认为 ‘All’。 -
import pandas as pd import numpy as np # 创建示例 DataFrame data = { 'A': ['foo', 'foo', 'foo', 'bar', 'bar'], 'B': ['one', 'one', 'two', 'two', 'one'], 'C': [1, 2, 3, 4, 5], 'D': [10, 20, 30, 40, 50] } df = pd.DataFrame(data) # 透视表 pivot = df.pivot_table(index='A', columns='B', values='C', aggfunc=np.sum) print(pivot) # 添加 margins pivot_with_margins = df.pivot_table(index='A', columns='B', values='C', aggfunc=np.sum, margins=True) print(pivot_with_margins)
-
基础透视:
假设我们有一个简单的数据集,包括日期、产品和销售额import pandas as pd data = { 'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'], 'Product': ['A', 'B', 'A', 'B'], 'Sales': [100, 150, 110, 140] } df = pd.DataFrame(data)
Date Product Sales 0 2023-01-01 A 100 1 2023-01-01 B 150 2 2023-01-02 A 110 3 2023-01-02 B 140
为了查看每一天的销售额中的每个产品,我们可以这样:
pivot_df = df.pivot_table(index='Date', columns='Product', values='Sales') print(pivot_df)
Product A B Date 2023-01-01 100 150 2023-01-02 110 140
-
聚合:
如果数据中有重复的行(即同一天,同一产品的多个销售数据),我们需要进行聚合操作
pivot_table默认使用np.mean进行聚合,但可以通过aggfunc参数更改为其他函数,例如sum创建一个透视表,它以Date索引为索引,以列为Product假设值,物质可能出现的重复数据进行求和 pivot_df = df.pivot_table(index='Date', columns='Product', values='Sales', aggfunc='sum') print(pivot_df)
Product A B Date 2023-01-01 100 150 2023-01-02 110 140
创建一个透视表,它以Product索引为索引,以列为Date假设值,物质可能出现的重复数据进行求和 pivot_df = df.pivot_table(index='Product', columns='Date', values='Sales', aggfunc='sum') print(pivot_df)
Date 2023-01-01 2023-01-02 Product A 100 110 B 150 140
-
多指数和多值:使用多个列作为索引或值
# 添加一个新的 'Region' 列到数据集 data['Region'] = ['North', 'South', 'North', 'South'] df = pd.DataFrame(data) Date Product Sales Region 0 2023-01-01 A 100 North 1 2023-01-01 B 150 South 2 2023-01-02 A 110 North 3 2023-01-02 B 140 South 创建一个透视表,它以Date、Region索引为索引,以列为Product假设值,物质可能出现的重复数据进行求和 pivot_df = df.pivot_table(index=['Date', 'Region'], columns='Product', values='Sales') print(pivot_df)
Product A B Date Region 2023-01-01 North 100.0 NaN South NaN 150.0 2023-01-02 North 110.0 NaN South NaN 140.0
-
填充值:使用fill_value参数来指定如何填充装载值
pivot_df = df.pivot_table(index='Date', columns='Product', values='Sales', fill_value=0) print(pivot_df)
Product A B Date 2023-01-01 100 150 2023-01-02 110 140