01_pandas

本文详细介绍了Pandas DataFrame的基本操作,包括创建DataFrame、访问数据、数据筛选、排序、填充缺失值、数据类型转换和列重命名等。通过实例展示了如何利用loc和iloc进行条件查询,以及如何对数据进行排序、添加默认值和删除空值。此外,还讨论了应用函数到DataFrame的方法。
摘要由CSDN通过智能技术生成

pandas

dataframe

由 Series 组成的字典

import pandas as pd
from pandas import np

# Series 列
pd.Series(range(10))

# dataframe 列集合
# [1, 2] 第一行
data = pd.DataFrame([["lili", 23], ['lisa', 25]], [1, 2], ["姓名", "年龄"])

# pd.DataFrame( data, index, columns, dtype, copy)

# data:一组数据(ndarray、series, map, lists, dict 等类型)。

# index:索引值,或者可以称为行标签。

# columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。

# dtype:数据类型。

# copy:拷贝数据,默认为 False。
列标签
data.columns
行索引
data.index
获取指定列
data['姓名']
data[["姓名", "年龄"]]
loc 通过行索引 “Index” 和 columns中的具体值来取行数据
# 第一行
data.loc[1]
# 姓名    lili
# 年龄      23

# 第一行 姓名 列
data.loc[1, "姓名"]

# 第一二行
data.loc[[1,2]]

# 获取一二行,年龄 和 姓名 的数据
data.loc[[1, 2], ["年龄", "姓名"]]

# 筛选年龄 > 10的数据
data.loc[data['年龄']>0]
iloc 通过行号和列号来取行数据
# 第一行二列
data.iloc[0, 1]

# 第一二行,一二列
data.iloc[[0, 1],[0, 1]]
条件过滤
data[data != np.nan]
data[data["姓名"] == "lili"]

# 多重筛选
df = pd.DataFrame({"name": ['123', 'Batman', 'Catwoman'],
                   "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                   "born": ["123", pd.Timestamp("1940-04-25"),pd.NaT]})

df[(df['name'] == "123") & (df['born'] == "12")]
索引排序
df = pd.DataFrame({"name": ['123', 'Batman', 'Catwoman'],
                   "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                   "born": ["123", pd.Timestamp("1940-04-25"),pd.NaT]})
                   
# sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)

# axis:0按照行名排序;1按照列名排序
# level:默认None,否则按照给定的level顺序排列---貌似并不是,文档
# ascending:默认True升序排列;False降序排列
# inplace:默认False,否则排序之后的数据直接替换原来的数据框
# kind:默认quicksort,排序的方法
# na_position:缺失值默认排在最后{"first","last"}
# by:按照那一列数据进行排序,但是by参数貌似不建议使用

df.sort_index(1, ascending=True)
值排序
sort_values(
        self,
        by,
        axis=0,
        ascending=True,
        inplace=False,
        kind="quicksort",
        na_position="last",
    )
df.sort_values(["name"], ascending=[True])
df.sort_values(["name", "toy"], ascending=True)
df.sort_values(["name", "toy"], ascending=[True, False])
添加默认值
data.fillna("")
删除空值
data.dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)
# axis : 0 表示行 1 表示列
# how:any 包含, all 全空
# thresh:int 包含空个数
#  subset:指定在哪些列判断是否为空
#  inplace:True 修改源数据,False不返回源数据
df = pd.DataFrame({"name": ['123', 'Batman', 'Catwoman'],
                   "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                   "born": ["123", pd.Timestamp("1940-04-25"),pd.NaT]})
                   
规范数据类型
# duration 列数据类型为int
pd.read_csv('../data/moive_metadata.csv', dtype={'duration': int})
数据替换
df.replace(
        self,
        to_replace=None,
        value=None,
        inplace=False,
        # limit =None,
        regex=False,
        method="pad",
    )
# method:填充方式,pad,ffill,bfill分别是向前、向前、向后填充
# limit 

df.replace("123", "one")
# 指定列
df.replace({"toy": "123", "name": "123"}, "one")
# 多值替换
df.replace(['123', 'Batman'], ['one', "two"])
df.replace(['123', 'Batman'], 'one')
# 正则替换
df.replace("\d+", "one", regex=True)
# 
df.replace('123',method='bfill')  #用123下面的最靠近非123的值填充
df.replace('123',method='ffill')  #用123上面最靠近非123的值填充
df.replace('123',method='pad')   #用123上面最靠近非123的值填充
列重命名
df.rename(columns={"name": "nameXXXX"})
apply 执行方法
apply(
        self,
        func,
        axis=0,
        broadcast=None,
        raw=False,
        reduce=None,
        result_type=None,
        args=(),
        **kwds
    )
axis:  0:index->对每列执行方法,1:columns,对每一行或者列执行方法
result_type: broadcast、reduce、expand,broadcast保持行列不变

df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])

# 所有值求平法
df.apply(np.sqrt)

# 列求和
df.apply(np.sum, axis=0)

# 
df.apply(np.sum, axis=1, result_type='reduce')
# 0    13
# 1    13
# 2    13

df.apply(np.sum, axis=1, result_type='broadcast')
#     A   B
# 0  13  13
# 1  13  13
# 2  13  13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值