pandas_01_pandas基础

本文介绍了Pandas库中的核心数据结构Series和DataFrame,包括它们的创建、索引、切片和数据操作。展示了如何通过索引和位置获取数据,排序、切片、筛选以及读取外部数据。还讲解了处理缺失数据的方法,如检查、删除和填充NaN。此外,还涵盖了数据统计和信息查询,如`describe()`和`info()`函数的使用。

原文链接

常用数据类型

  1. Series 一维,带标签(索引)数组

    t = pd.Series([random.randint(0, 10) for i in range(5)], index=list("abcde"))
    
    a    10
    b     0
    c     3
    d     9
    e     7
    dtype: int64
    

    或通过字典创建Series

    a = {"name": "小李", "age": 18, "tele": "187888"}
    t1 = pd.Series(a)
    print(t1)
    
    name        小李
    age         18
    tele    187888
    dtype: object
    

    可以通过索引和位置来取数据。

    print(t[1: 4])
    print(t[[1, 3, 4]])
    print(t[["a", "c"]])
    print(t[t > 5])
    print(t.index, t.values)
    
    b    7
    c    3
    d    8
    dtype: int64
    b    7
    d    8
    e    2
    dtype: int64
    a    8
    c    3
    dtype: int64
    a    8
    b    7
    d    8
    dtype: int64
    Index(['a', 'b', 'c', 'd', 'e'], dtype='object') [8 7 3 8 2]
    
  2. DataFrame 二维,Series容器

    t = pd.DataFrame(np.arange(12).reshape((3, 4)), index=list("abc"), columns=list("ABCD"))
    print(t)
    
    # 输出
       A  B   C   D
    a  0  1   2   3
    b  4  5   6   7
    c  8  9  10  11
    

    或通过字典创建DataFrame

    # 法1
    a = {"name": ["小明", "小李"], "age": [18, 19], "tel": ["18721", "13999"]}
    t1 = pd.DataFrame(a)
    print(t1)
    
    # 法2
    b = [{"name": "大明", "age": 18}, {"name": "大李", "age": 20}]
    t2 = pd.DataFrame(b)
    print(t2)
    
      name  age    tel
    0   小明   18  18721
    1   小李   19  13999
    
      name  age
    0   大明   18
    1   大李   20
    

    DataFrame对象既有行索引,又有列索引

    行索引,表明不同行,横向索引,叫index,0轴,axis=0

    列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

    DataFrame的基本属性:

    1. df.shape # 行数 列数
    2. df.dtypes # 列数据类型
    3. df.ndim # 数据维度
    4. df.index # 行索引
    5. df.columns # 列索引
    6. df.values # 对象值,二维ndarray数组

    DataFrame整体情况查询:

    1. df.head(3) # 显示头部几行,默认5
    2. df.tail(3) # 显示末尾几行,默认5
    3. df.info() # 相关信息概览,行数、列数、列索引、列非空值个数、列类型、内存占用。
    4. df.describe() # 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值。

    DataFrame排序:

    # by: 根据哪一列进行排序
    # ascending: 升序或降序
    t.sort_values(by="B", ascending=False)
    

    DataFrame切片索引:

    1. 方括号写数字表示取行: t[:2]

    2. 方括号写字符串表示取列: t["B"]

    3. 同时取行和列:t[:2]["B"]

      • df.loc 通过标签索引行数据

        t.loc["a", "B"]
        Out[34]: 1
        
        t.loc["a"]
        Out[37]: 
        A    0
        B    1
        C    2
        D    3
        Name: a, dtype: int32
        
        t.loc["a",:]
        Out[36]: 
        A    0
        B    1
        C    2
        D    3
        Name: a, dtype: int32
        
        t.loc[:, "B"]
        Out[38]: 
        a    1
        b    5
        c    9
        Name: B, dtype: int32
        
        t.loc[["a", "c"], ["A", "C"]]
        Out[39]: 
           A   C
        a  0   2
        c  8  10
        
      • df.iloc 通过位置获取行数据

      通过这种方法也可以进行赋值。

    4. 布尔索引:

      t[(t["A"] > 3) & (t["B"] < 9)]
      Out[52]: 
         A  B  C  D
      b  4  5  6  7
      

读取外部数据

# pandas读取csv文件
df = pd.read_csv("./XXX.csv")

缺失数据处理

判断是否为nan:pd.isnull(t)
       A      B      C      D
a  False  False  False  False
b  False   True   True  False
c  False   True   True  False
判断是否不为nan:pd.notnull(t)
      A      B      C     D
a  True   True   True  True
b  True  False  False  True
c  True  False  False  True
删除包含nan所在的行或列
# axis=0表示删除有nan的行,axis=1表示删除有nan的列
# how="any"表示有一个nan就删,how="all"表示全部为nan就删
# inplace=False表示不进行原地修改,=True表示进行原地修改

t.dropna(axis=0, how="any")
填充nan所在的位置
t.fillna(t.mean())
# 或者只填充一列
t["B"].fillna(t["B"].mean())
Pandas 中,`datetime` 相关的功能主要通过 `pandas.Timestamp`、`pandas.Timedelta` 和 `pandas.DatetimeIndex` 等类来实现。这些类提供了对日期和时间的高效操作。然而,Pandas 的 C API 并不直接暴露给用户,而是作为内部接口供底层开发和性能优化使用。 对于与 `datetime` 相关的 C API,其主要用途是提供对 `datetime` 类型数据的底层访问和操作能力。这些接口通常用于扩展 Pandas 或与底层 C/C++ 代码交互。以下是一些常见的使用场景和注意事项: 1. **访问 `datetime` 数据的底层表示** Pandas 使用 `int64` 类型存储 `datetime64[ns]` 数据,其值表示从 Unix 纪元(1970-01-01)开始的纳秒数。通过 C API,可以直接访问这些底层值,例如: ```c int64_t value = pandas_timestamp_value(timestamp_obj); ``` 2. **创建和操作 `datetime` 对象** 可以通过 C API 创建 `pandas.Timestamp` 对象,并对其进行基本操作,例如: ```c pandas_Timestamp *ts = pandas_Timestamp_new(2023, 1, 1, 0, 0, 0, 0); ``` 3. **处理时区信息** Pandas 支持带有时区信息的 `datetime` 对象。通过 C API,可以设置或获取时区属性: ```c pandas_Timestamp_set_timezone(ts, "UTC"); const char *tz = pandas_Timestamp_get_timezone(ts); ``` 4. **与 NumPy 的 `datetime64` 交互** Pandas 的 `datetime` 功能基于 NumPy 的 `datetime64` 类型。C API 提供了将 Pandas 对象转换为 NumPy 数组的功能: ```c numpy_datetime64_t np_dt = pandas_timestamp_to_numpy(ts); ``` 5. **性能优化** 在需要高性能的场景中,C API 可以绕过 Python 的解释器,直接操作底层数据结构。例如,在处理大规模时间序列数据时,可以通过 C API 实现高效的循环计算。 6. **注意事项** - 使用 C API 需要对 Python 的 C 扩展机制有一定了解。 - 底层接口可能随着 Pandas 版本更新而发生变化,因此需要密切关注文档更新。 - 建议优先使用 Pandas 提供的高级接口,只有在性能瓶颈明显时才考虑使用 C API。 有关更详细的文档和使用示例,可以参考 Pandas 的官方文档和源代码中的 `pandas/_libs` 目录。这些资源提供了与 `datetime` 相关的 C API 的具体实现和使用方法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值