目录

一、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():按列遍历


一、DataFrame对象的创建

1、根据列表创建:

行索引是index,列索引是columns

情况1:由二维列表

默认的 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 女

情况2:由元组tuple组成的列表

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 女

情况3:由字典dict组成的列表

import pandas as pd

data = [
    {'姓名': '张三', '年龄': 23, '性别': '男'}, 
    {'姓名': '李四', '年龄': 27, '性别': '男'},
    {'姓名': '王二', '年龄': 26}
]
# 缺少的值自动添加NaN
df = pd.DataFrame(data)
print(df)

运行结果:

姓名 年龄 性别
0 张三 23 男
1 李四 27 男
2 王二 26 NaN

情况4:由数组array组成的列表

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
性别 男 女 女

情况5:由序列series组成的列表

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
性别 男 女 女

2、根据字典创建:

该字典必须满足:每一个key对应的value长度都相同:

情况1:由元组tuple组成的字典

import pandas as pd

data = {
    '姓名': ('张三', '李四', '王二'), 
    '年龄': (23, 27, 26), 
    '性别': ('男', '女', '女')
}
df = pd.DataFrame(data)
print(df)

运行结果:

姓名 年龄 性别
0 张三 23 男
1 李四 27 女
2 王二 26 女

情况2:由列表list组成的字典

import pandas as pd

data = {
    '姓名': ['张三', '李四', '王二'], 
    '年龄': [23, 27, 26],
    '性别': ['男', '女', '女']
}
df = pd.DataFrame(data)
print(df)

运行结果:

姓名 年龄 性别
0 张三 23 男
1 李四 27 女
2 王二 26 女

情况3:由字典dict组成的字典

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 女

情况4:由数组array组成的字典

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 女

情况5:由序列series组成的字典

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

情况6:由复合式的字典

import pandas as pd

data = {'单位': '1', '姓名': ['张三', '李四', '王二'], '年龄': [23, 27, 26], '性别': ['男', '女', '女']}
# 每行的单位列自动添加
df = pd.DataFrame(data)
print(df)

运行结果:

单位 姓名 年龄 性别
0 1 张三 23 男
1 1 李四 27 女
2 1 王二 26 女

3、根据二维数组ndarray创建:

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 女

二、DataFrame常用属性

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')

三、DataFrame的访问

1、读取dataframe表中的行

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列的数据

2、读取dataframe表中的列

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列

3、读取dataframe表中的元素

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', '年龄'])  

4、条件读取

  • df.loc[df['gender']=='m','name'] # 选取gender列是m,name列的数据
  • df.loc[df['gender']=='M',['name','age']] #选取gender列是m,name和age列的数据
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 的区别

  • df.iloc[row_index位置, column_index位置]
  • df.loc[row_index, column_index]
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 男

四、DataFrame数据修改

1、修改DataFrame表中的行

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)

2、修改DataFrame表中的列

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)

3、修改DataFrame表中的元素

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])

1、iterrows(): 按行遍历

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:<class 'pandas.core.series.Series'>
    print('姓名年龄:', row['姓名'], row['年龄'])  # 输出每一行‘姓名’‘年龄’两列的值

运行结果:

index: a
row: 姓名 赵一
        年龄 23
        性别 男
        Name: a, dtype: object
姓名年龄: 赵一 23
index: b
row: 姓名 钱二
        年龄 27
        性别 女
        Name: b, dtype: object
姓名年龄: 钱二 27

2、itertuples(): 按行遍历

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:<class 'pandas.core.frame.Pandas'>
    print(getattr(row, '姓名'), getattr(row, '年龄'))   # 输出每一行‘姓名’‘年龄’两列的值

运行结果:

Pandas(Index='a', 姓名='赵一', 年龄='23', 性别='男') 赵一 23
Pandas(Index='b', 姓名='钱二', 年龄='27', 性别='女') 钱二 27

3、iteritems():按列遍历

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 <class 'pandas.core.series.Series'>
    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行的值: 男
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐