day22 学习笔记
文章目录
- 前言
- 一、遍历
- 1.行遍历
- 2.列遍历
- 3.直接遍历
- 二、排序
- 三、去重
- 四、分组
前言
通过今天的学习,我掌握了对Pandas的数据类型进行基本操作,包括遍历,去重,排序,分组
一、遍历
1.行遍历
- intertuples方法用于遍历Dataframe的行,返回包含行数据及命名的元组
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
# 使用 itertuples() 遍历行
for row in df.itertuples(index=False): #如果index为False,则结果过滤行索引信息
print(row)
for i in row:
print(i)
tips:可以指定index参数,用于控制是否返回行索引信息
2.列遍历
- items方法用于遍历Dataframe的列,返回包括列名和列数据的迭代器
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
# 使用 items() 遍历列
for column_name, column_data in df.items():
print(f"Column Name: {column_name}, Column Data: {column_data}")
3.直接遍历
- 使用index,columns属性进行遍历
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
for idx in df.index:
for col in df.columns:
print(df.loc[idx,col])
二、排序
- sort_values方法用于对Dataframe进行排序
- DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
- by:列的标签或列的标签列表。指定要排序的列
- ascending:布尔值或布尔值列表,指定是升序排序(True)还是降序排序(False)。可以为每个列指定不同的排序方向。
data = {
'A': [3, 2, 1],
'B': [6, 5, 4],
'C': [9, 8, 7]
}
df = pd.DataFrame(data, index=['b', 'c', 'a'])
df_sorted = df.sort_values(by='A',ascending=False)
print(df_sorted)
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 30, 25, 35, 30],
'Score': [85, 90, 80, 95, 88]
})
# 如果列中存在相同的值,可以指定两个列进行排序
df_sorted = df.sort_values(by=['Age', 'Score'], ascending=[False, True])
print(df_sorted)
三、去重
- drop_duplicates方法用于删除重复行或元素
- drop_duplicates(by=None, subset=None, keep=‘first’, inplace=False)
- keep:指定如何处理重复项
- by:用于标识重复项的列名或列名列表
data = {
'A': [1, 2, 2, 3],
'B': [4, 5, 5, 6],
'C': [7, 8, 8, 9]
}
df = pd.DataFrame(data)
# 删除所有列的重复行,默认保留第一个出现的重复项
df_unique = df.drop_duplicates()
print(df_unique)
# 删除重复行,保留最后一个出现的重复项
df_unique = df.drop_duplicates(keep='last')
print(df_unique)
# 删除所有重复项
df_unique = df.drop_duplicates(keep=False)
print(df_unique)
四、分组
- groupby方法用于对数据进行分组
- DataFrame.groupby(by, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
- by:指定分组的列名
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': [1, 2, 3, 4, 5, 6, 7, 8],
'D': [10, 20, 30, 40, 50, 60, 70, 80]
}
df = pd.DataFrame(data)
# 按列'A'分组,返回一个对象
grouped = df.groupby('A')
# 查看分组结果
for name, group in grouped:
print(f"Group: {name}")
print(group)
print()
mean = df.select_dtypes(include='number').groupby(df['A']).mean()
print(mean)
mean = df.groupby("A")["D"].mean() #如果不指定列,会计算所有列的均值
print(mean)
# transform用于在分组操作中对每个组内的数据进行转换,并将结果合并回原始 DataFrame
mean = df.groupby("A")["D"].transform(lambda x: x.mean())
# print(mean)
df['C_mean'] = mean
print(df)
THE END