目录
一、DataFrame对象的创建
1、根据列表创建:
情况1:由二维列表
情况2:由元组tuple组成的列表
情况3:由字典dict组成的列表
情况4:由数组array组成的列表
情况5:由序列series组成的列表
2、根据字典创建:
情况1:由元组tuple组成的字典
情况2:由列表list组成的字典
情况3:由字典dict组成的字典
情况4:由数组array组成的字典
情况5:由序列series组成的字典
情况6:由复合式的字典
3、根据二维数组ndarray创建:
二、DataFrame常用属性
三、DataFrame的访问
1、读取dataframe表中的行
2、读取dataframe表中的列
3、读取dataframe表中的元素
4、条件读取
四、DataFrame数据修改
1、修改DataFrame表中的行
2、修改DataFrame表中的列
3、修改DataFrame表中的元素
五、遍历
1、iterrows(): 按行遍历
2、itertuples(): 按行遍历
3、iteritems():按列遍历
行索引是index,列索引是columns
默认的 index 和 columns
import pandas as pd
data = [['张三', 23, '男'], ['李四', 27, '女'], ['王二', 26, '女']]
df = pd.DataFrame(data)
print(df)
运行结果:
0 1 2
0 张三 23 男
1 李四 27 女
2 王二 26 女
指定索引ndex 和 columns值:
import pandas as pd
data = [['张三', 23, '男'], ['李四', 27, '女'], ['王二', 26, '女']]
df = pd.DataFrame(data, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c'])
print(df)
运行结果:
姓名 年龄 性别
a 张三 23 男
b 李四 27 女
c 王二 26 女
import pandas as pd
data = [('张三', 23, '男'), ('李四', 27, '女'), ('王二', 26, '女')]
df = pd.DataFrame(data, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c'])
print(df)
运行结果:
姓名 年龄 性别
a 张三 23 男
b 李四 27 女
c 王二 26 女
import pandas as pd
data = [
{'姓名': '张三', '年龄': 23, '性别': '男'},
{'姓名': '李四', '年龄': 27, '性别': '男'},
{'姓名': '王二', '年龄': 26}
]
# 缺少的值自动添加NaN
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄 性别
0 张三 23 男
1 李四 27 男
2 王二 26 NaN
import pandas as pd
import numpy as np
data = [
np.array(('张三', 23, '男')),
np.array(('李四', 27, '女')),
np.array(('王二', 26, '女'))
]
df = pd.DataFrame(data, columns=['姓名', '年龄', '性别'])
print(df)
运行结果:
姓名 年龄 性别
0 张三 23 男
1 李四 27 女
2 王二 26 女
import pandas as pd
import numpy as np
data = [
np.array(('张三', '李四', '王二')),
np.array((23, 27, 26)),
np.array(('男', '女', '女'))
]
df = pd.DataFrame(data, index=['姓名', '年龄', '性别'])
print(df)
运行结果:
0 1 2
姓名 张三 李四 王二
年龄 23 27 26
性别 男 女 女
import pandas as pd
data = [
pd.Series(['张三', '李四', '王二'], index=['a', 'b', 'c']),
pd.Series([23, 27], index=['a', 'b']),
pd.Series(['男', '女', '女'], index=['a', 'b', 'c'])
]
# 序列里的index作为dataframe表的columns索引
# 缺少值自动添加NaN
df = pd.DataFrame(data, index=['姓名', '年龄', '性别'])
print(df)
运行结果:
a b c
姓名 张三 李四 王二
年龄 23.0 27.0 NaN
性别 男 女 女
该字典必须满足:每一个key对应的value长度都相同:
import pandas as pd
data = {
'姓名': ('张三', '李四', '王二'),
'年龄': (23, 27, 26),
'性别': ('男', '女', '女')
}
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄 性别
0 张三 23 男
1 李四 27 女
2 王二 26 女
import pandas as pd
data = {
'姓名': ['张三', '李四', '王二'],
'年龄': [23, 27, 26],
'性别': ['男', '女', '女']
}
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄 性别
0 张三 23 男
1 李四 27 女
2 王二 26 女
import pandas as pd
data = {'姓名': {'1': '张三', '2': '李四', '3': '王二'},
'年龄': {'1': 23, '2': 27, '3': 26},
'性别': {'1': '男', '2': '女', '3': '女'}
}
# data.key 作为datafreme表的columns;
# data.value中的key 作为dataframe表的index
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄 性别
1 张三 23 男
2 李四 27 女
3 王二 26 女
import pandas as pd
import numpy as np
data = {
'姓名': np.array(('张三', '李四', '王二')),
'年龄': np.array((23, 27, 26)),
'性别': np.array(('男', '女', '女'))
}
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄 性别
0 张三 23 男
1 李四 27 女
2 王二 26 女
import pandas as pd
data = {
'姓名': pd.Series(['张三', '李四', '王二'], index=['a', 'b', 'c']),
'年龄': pd.Series([23, 27], index=['a', 'b'])
}
# 序列里的index作为dataframe表的index索引
# 字典里的key作为dataframe表的columns索引
df = pd.DataFrame(data)
print(df)
运行结果:
姓名 年龄
a 张三 23.0
b 李四 27.0
c 王二 NaN
import pandas as pd
data = {'单位': '1', '姓名': ['张三', '李四', '王二'], '年龄': [23, 27, 26], '性别': ['男', '女', '女']}
# 每行的单位列自动添加
df = pd.DataFrame(data)
print(df)
运行结果:
单位 姓名 年龄 性别
0 1 张三 23 男
1 1 李四 27 女
2 1 王二 26 女
import pandas as pd
import numpy as np
array1 = np.array([['张三', 23, '男'], ['李四', 27, '女'], ['王二', 26, '女']])
df = pd.DataFrame(array1, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c'])
print(df)
运行结果:
姓名 年龄 性别
a 张三 23 男
b 李四 27 女
c 王二 26 女
import pandas as pd
data = {'姓名': ['张三', '李四', '王二'], '年龄': [23, 27, 26], '性别': ['男', '女', '女']}
df = pd.DataFrame(data)
# 返回对象数据形状 即:三行三列
print(df.shape, '\n')
# 返回序列的值
print(df.values, '\n')
# 返回行索引
print(df.index, '\n')
# 返回列索引
print(df.columns, '\n')
# 返回列标签(只针对dataframe数据结构)
print(df.columns.tolist())
# 返回元素数据类型
print(df.dtypes, '\n')
# 返回对象的维度
print(df.ndim, '\n')
# 返回对象的个数
print(df.size, '\n')
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'])
# df[row_index_start: row_index_end]
# # 左闭右开
print(df1[0:1]) # 第1行
print(df1[0:]) # 第1行及之后的行,df的全部数据
print(df1[:2]) # 第3行之前的数据(不包含第3行)
print(df1[1:3]) # 第2行到第3行(不含第4行)
print(df1[-3:-1]) # 倒数第3行和倒数第2行,没有-0
print(df1[-1:]) # 最后一行
# # 左闭右闭
print(df1['a':'a']) # 第1行
print(df1['a':'d']) # 第1行及之后的行,df的全部数据
print(df1[:'b']) # 第3行之前的数据(不包含第3行)
print(df1['b':'c']) # 第2行到第3行(不含第4行)
print(df1['d':]) # 最后一行
# df[column_index][row_index]
print(df1[['姓名', '年龄']][0:3]) # 第1列和第2列的第1行到第3行 数据
# df.iloc[row_inde_位置, column_index_位置]
print(df1.iloc[[1, 3], 0:2]) # 第2行和第4行,从第1列到第2列(左闭右开不包含第3列)的数据
print(df1.iloc[1:3, [1, 2]]) # 第2行到第3行(不包含第1,4行),第2列和第3列的数据
# df.loc[row_index, column_index]
print(df1.loc[['b', 'd'], '姓名': '年龄']) # 第2行和第4行,从第1列到第2列(左闭右开不包含第3列)的数据
print(df1.loc['b': 'c', ['年龄', '性别']]) # 第2行到第3行(不包含第1,4行),第2列和第3列的数据
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd'])
# df[[column_index_start, column_index_end]]
print(df1['姓名']) # 第1列
print(df1[['姓名', '性别']]) # 第1列和第3列
print(df1.loc[:, '姓名']) # 第1列
print(df1.iloc[:, 0]) # 第1列
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd'])
# 读取第1行第2列 数据
# df[column_index][row_index]
print(df1['年龄'][0])
print(df1['年龄']['a'])
# df.iloc[row_index_位置, column_index_位置]
print(df1.iloc[0, 1])
# df.loc[row_index, column_index]
print(df1.loc['a', '年龄'])
# df.iat[row_index, column_index]
print(df1.iat[0, 1])
# df.at[row_index, column_index]
print(df1.at['a', '年龄'])
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd'])
# 读取姓名为‘李四’的‘性别’
print(df1.loc[df1['姓名'] == '李四', '性别'])
# 读取性别是‘女’的 ‘姓名’和‘年龄’
print(df1.loc[df1['性别'] == '女', ['姓名', '年龄']])
# 读取‘姓名’是‘张三’和‘王二’所在行的‘性别’
print(df1.loc[(df1['姓名'] == '赵一') | (df1['姓名'] == '钱二'), '性别'])
注:df.iloc 和 df.loc 的区别
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=[3, 2, 1, 0])
print(df1.iloc[:3]) # 前3行数据
print(df1.loc[:3]) # row_index = 3 那一行数据
运行结果:
df1.iloc[:3]:
姓名 年龄 性别
3 赵一 23 男
2 钱二 27 女
1 孙三 26 女
df1.loc[:3]:
姓名 年龄 性别
3 赵一 23 男
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd'])
# 将第1行第2列改为 '19' 的四种方法
df1['年龄'][0] = 19
df1['年龄']['a'] = 19
df1.loc['a', '年龄'] = 19
df1.iloc[0, 1] = 19
print(df1)
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd'])
# 将第1行 改为 ['aa', 23, '女'] 的四种方法
df1[0:1] = ['aa', 23, '女']
df1['a':'a'] = ['aa', 23, '女']
df1.loc['a'] = ['aa', 23, '女']
df1.iloc[0, :] = ['aa', 23, '女']
print(df1)
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd'])
# 将第1列 改为[11, 12, 13, 14] 的三种方法
df1['年龄'] = [11, 12, 13, 14]
df1.loc[:, '年龄'] = [11, 12, 13, 14]
df1.iloc[:, 1] = [11, 12, 13, 14]
print(df1)
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女'], ['孙三', 26, '女'], ['李四', 12, '男']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b', 'c', 'd'])
# 读取‘姓名’列
for i in df1.index:
print(df1['姓名'][i])
# 读取第1行
for j in df1.columns:
print(df1[j][0])
# 读取每个元素
for i in df1.index:
for j in df1.columns:
print(df1[j][i])
iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b'])
for index, row in df1.iterrows():
print('index:', index) # 输出每行的索引值
print('row:', row) # 输出每行的值 row:
print('姓名年龄:', row['姓名'], row['年龄']) # 输出每一行‘姓名’‘年龄’两列的值
运行结果:
index: a
row: 姓名 赵一
年龄 23
性别 男
Name: a, dtype: object
姓名年龄: 赵一 23
index: b
row: 姓名 钱二
年龄 27
性别 女
Name: b, dtype: object
姓名年龄: 钱二 27
itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高。
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b'])
for row in df1.itertuples():
print(row) # row:
print(getattr(row, '姓名'), getattr(row, '年龄')) # 输出每一行‘姓名’‘年龄’两列的值
运行结果:
Pandas(Index='a', 姓名='赵一', 年龄='23', 性别='男') 赵一 23
Pandas(Index='b', 姓名='钱二', 年龄='27', 性别='女') 钱二 27
iteritems():按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问。
import pandas as pd
import numpy as np
arr = np.array([['赵一', 23, '男'], ['钱二', 27, '女']])
df1 = pd.DataFrame(arr, columns=['姓名', '年龄', '性别'], index=['a', 'b'])
for index, row in df1.iteritems():
print('列名:', index) # 输出列名
print('每列的值:', row) # row
print('每列的第1行的值:', row[0]) # 输出各列
运行结果:
列名: 姓名
每列的值: a 赵一
b 钱二
Name: 姓名, dtype: object
每列的第1行的值: 赵一
列名: 年龄
每列的值: a 23
b 27
Name: 年龄, dtype: object
每列的第1行的值: 23
列名: 性别
每列的值: a 男
b 女
Name: 性别, dtype: object
每列的第1行的值: 男