文章目录
- 前言
- 一、遍历
- 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