Pandas 的DataFrame基本操作总结

Pandas 的DataFrame基本操作总结

   最近在项目中使用到了Pandas的DataFrame,趁着新鲜劲儿,整理以下用到的知识,如果有不对的地方,请各位博主指正。

本博客从DataFrame创建以及对DataFrame的空,筛选列等操作做介绍。

1. 创建DataFrame

输入可以是np.array, list,也可以是excel,csv等。

df = pd.DataFrame([[1, "aa", 12, 67, "xian"],
                  [2, "bb", 13, 89, "shanghai"],
                  [3, "cc", 12, 56, "hangzhou"],
                  [4, "dd", 10, 90, "suzhou"]], columns=["id", "name", "credit", "score", "city"])
print(df.head())

输出

id name  credit  score      city
0   1   aa      12     67      xian
1   2   bb      13     89  shanghai
2   3   cc      12     56  hangzhou
3   4   dd      10     90    suzhou

2. 基本操作

基本操作包含以下内容
  - 对列的操作
  - 对空的处理
  - groupby
  - 去重
  - 统计不同的元素
  - lambda 函数使用
  - merge
  - 保存

2.1 对列的操作

利用pandas读取csv文件

df = pd.read_csv("./xxxx.csv")
print("df columns: ", df.columns)
print('data size: ', df.shape)
print(df.head())
  • 修改列名
df.columns = ['pclass', 'survived', 'name', 'sex', 'age', 'sibsp', 'parch', 'ticket',
       'fare', 'cabin', 'embarked']
  • 选择需要的列
df_name = df[['name', 'sex', 'age', 'sibsp']]
  • 新增列
    新增一列salary,并赋值为10000.
df["salary"] = 10000

2.2 对空值的处理

  • 查看数据的空值缺失情况
df.isnull().sum()

输出

pclass         1
survived       1
name           1
sex            1
age          264
sibsp          1
parch          1
ticket         1
  • 查看某一值的缺失比例
print('"age" 缺失的占比  %.2f%%' %((df['age'].isnull().sum()/df.shape[0])*100))
  • 对空值的填充
    • 这里采用均值填充,也可以采用最大值等其他方式填充。
data = df.copy()
data["age"].fillna(df["age"].median(skipna=True), inplace=True)
  • 删除空值
data_na = df.copy()
print("data na shape: ", data_na.shape)
data_na = data_na.dropna()
print("data_na shape: ", data_na.shape)
data na shape:  (1310, 12)
data_na shape:  (270, 12)

2.3 分组

  • groupby
    • groupby返回的是DataFrame,index为groupby所选的列,可以与sum(), mean()等聚合函数一起使用。
data_gy = data.copy()
data_gy = data_gy[['pclass', 'survived', 'sex']].groupby(data_gy['age'])
print(data_gy.head())

(1)聚合运算

data_gy = data.copy()
data_gy = data_gy[['pclass', 'survived', 'sex']].groupby(data_gy['age']).mean()
print(data_gy.head())

(2)分组结果

data_gy = data.copy()
for name, group in data_gy[['sex', 'age']].groupby('age'):
    print (group)

2.4 去重

去掉dataframe中的重复的行

data = df.copy()
data = data.drop_duplicates()

2.5 统计某一列的元素

方法1:

data = df.copy()
data["age"].fillna(df["age"].median(skipna=True), inplace=True)
age_list = list(set(data['age'].values.tolist()))
print("different age: ", age_list)

方法2:

age = data["age"].unique().tolist()
print("age set: ", age)

unique()是dataframe的内置函数,在数据量大的情况下,方法二比方法一的速度要快。

2.6 lambda 函数使用

lambda函数可以针对dataframe的列或者行自动遍历处理数据,比for循环快了很多。

  • 新增列
df = pd.DataFrame([[1, "aa", "体育教学", 67, "xian", "体育新闻报道,刘翔姚明出席下午的活动"],
                  [2, "bb", "英语教学", 89, "shanghai","老板有着一口流利的英语"],
                  [3, "cc", "语文教学", 56, "hangzhou", "中国诗词大会上董卿随口说出很多诗句,还说出对诗的理解"],
                  [4, "dd", "数学", 90, "suzhou", "图像配准使用了微分几何的微分同胚"]], 
                  columns=["id", "name", "class", "score", "city", "text"])
df["tag"] = df.apply(lambda x: "A" if x["score"] >= 89 else "B" if x["score"] >=60 and x["score"] < 89 else "C", axis=1)

输出

id name class  score      city                        text tag
0   1   aa  体育教学     67      xian          体育新闻报道,刘翔姚明出席下午的活动   B
1   2   bb  英语教学     89  shanghai                 老板有着一口流利的英语   A
2   3   cc  语文教学     56  hangzhou  中国诗词大会上董卿随口说出很多诗句,还说出对诗的理解   C
3   4   dd    数学     90    suzhou            图像配准使用了微分几何的微分同胚   A
  • lambda 可以写函数对元素进行操作处理
import jieba
def get_token(x):
    token_list = [token for token in jieba.cut(x['text'])]
    return token_list
df['token'] = df.apply(lambda x: get_token(x), axis=1)

输出

id name class  score      city                        text  \
0   1   aa  体育教学     67      xian          体育新闻报道,刘翔姚明出席下午的活动   
1   2   bb  英语教学     89  shanghai                 老板有着一口流利的英语   
2   3   cc  语文教学     56  hangzhou  中国诗词大会上董卿随口说出很多诗句,还说出对诗的理解   
3   4   dd    数学     90    suzhou            图像配准使用了微分几何的微分同胚   

                                               token  
0               [体育新闻, 报道,, 刘翔, 姚明, 出席, 下午,, 活动]  
1                            [老板, 有着, 一口, 流利,, 英语]  
2  [中国, 诗词, 大会,, 董卿, 随口, 说出, 很多, 诗句,,, 说出, ...  
3               [图像, 配准, 使用,, 微分, 几何,, 微分,,]  

2.7 merge

pandas的merge和sql中的join类似,分为left,right, inner, outer。其中on是选取哪一个列名进行关联,how是选择关联的方式。

df_name = pd.DataFrame([["aa", "体育"],
                        ["bb", "英语"],
                        ["cc", "语文"],
                        ["dd", "数学"]], columns=["name", "func"])
df_new = pd.merge(df, df_name, on=["name"], how='inner')

2.8 保存

dataframe可以保存为csv,excel,也可以写入mysql数据库。

df.to_csv("文件名", index=False, header=True, encoding="utf-8)
df.to_excel("文件名", index=False, header=True, encoding="utf-8)
df.to_sql('数据库表名', database, index=False, if_exists='append')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas DataFramePython 中使用最广泛的数据结构之一,它采用表格的形式存储数据,类似于 Excel 中的表格。DataFrame 可以进行多种操作,如数据整理、切片、查询、聚合等。 1. 创建 DataFrame 可以通过 pandas.read_csv(),pandas.read_excel() 等方法导入已有数据文件,也可以手动创建。使用 pandas.DataFrame() 方法,将数据数组传递给 DataFrame 的构造函数即可创建 DataFrame。例如,以下创建一个有两个列的 DataFrame: ```python import pandas as pd data = {'name': ['Tom', 'Jerry'], 'age': [25, 30]} df = pd.DataFrame(data) ``` 2. 基本信息查看 使用 df.head() 和 df.tail() 方法可以查看 DataFrame 的头几行或尾几行数据,默认显示前五行或后五行。 使用 df.shape 可以查看行列数。 使用 df.info() 可以查看每一列的名字、数据类型和缺失值数量。 3. 数据选择与切片 可以使用 df.loc[] 和 df.iloc[] 方法选择行和列。 df.loc[] 通过标签选择数据,可以选择一行或多行数据。例如,选取第一行数据: ```python df.loc[0] ``` df.iloc[] 通过位置选择数据,也可以选择一行或多行。例如,选取第一行数据: ```python df.iloc[0] ``` 可以通过 df["column_name"] 选取列。例如,以下选取列 name: ```python df["name"] ``` 4. 数据过滤与查询 可以通过布尔索引过滤数据。例如,以下选取 age 大于 25 的行: ```python df[df["age"] > 25] ``` 可以使用 df.query() 方法查询数据。例如,以下查询名字为 Tom 的行: ```python df.query("name == 'Tom'") ``` 5. 数据处理与聚合 可以使用 df.apply() 方法处理数据。例如,以下将 age 列中的数据加 10: ```python df["age"] = df["age"].apply(lambda x: x + 10) ``` 可以使用 df.groupby() 方法进行数据聚合。例如,以下对 age 列进行平均数聚合: ```python df.groupby("age")["age"].mean() ``` 以上是 Pandas DataFrame基本操作,包括创建 DataFrame、基本信息查看、数据选择与切片、数据过滤与查询、数据处理与聚合等。通过这些方法可以轻松地对 DataFrame 进行操作,方便地进行数据分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值