zoukankan      html  css  js  c++  java
  • pandas 笔记

    删除:

      del df["A"]  # 原地修改

      df.drop("a")  # 返回修改后的新对象

      df.drop(["a", "b", "c"])

    修改:

    增加,修改:

      df["ps"] = 1   # 可以通过标量或者数组进行列赋值,如果是通过列表或者数组进行赋值,长度必须与df长度一致,如果通过series赋值,索引会精确匹配,没有的会补NAN

    创建:

      通过传入字典或者列表进行创建。

    属性:

      index,columns,values

      index: 行索引

      columns: 列索引 df.columns.tolist()

      行索引和列索引都可以通过drop进行删除,drop可以接受axis参数。

    重新索引:

      reindex, df.reindex(["a", "b", "c", "d", "e"], fill_value=0)

    axis:

      就是0轴匹配的是index, 涉及上下运算;1轴匹配的是columns, 涉及左右运算,此条来自知乎

    获取数据:

      df["A"], df[["A", "B"]]  # 获取列

      df[:2], df[df['A'] > 1]  # 获取行

      df[df<5]  # 通过布尔型df  df[<5]进行选取,范围是整个df

    索引字段:

       ix, df.ix[row1: row3][col1: col9]

      df.ix[:][val]  # 选取列

      df.ix[rows][cols]  # 选取行列

    获取df大小:

      df.shape  # 返回行和列的维数

    索引操作:

      df.set_index([col], drop=False)  # 列设置为索引

      df.reset_index()  # 层次化索引转移到列

    支持的算数运算: add, sub, mul, div

    相加:

      df1 + df2 按照索引把两个df的值相加,无交集的地方填充NAN

      df1.add(df2, fill_value=0)  无交集的地方填充0

    合并:

      merge

        pd.merge(df1, df2, how="inner", on="key")  #  按照某一列将两个df合并,how关键字参数决定是进行交集还是并集,按照左侧df合并还是右侧df合并,默认是交集。

        注意:add是按照index将两个df对应列的值相加,merge是按照列合并两个df,结果的值是用于合并的两个df中的一个值,key重复的值只保留一个,并没有进行算数运算。

        如果merge需要按照index可以传入参数left_index=True, right_index=True, pd.merge(df1, df2, left_index=True, right_index=True)

      concat

        拼接两个df,保留两个df的值

        pd.concat([df, df1], axis=0)  # 按行拼接

        pd.concat([df, df1], axis=1, keys=[1, 2])  # 按列拼接

    相减:

      df - series会广播,将series匹配到df的列,然后沿着列一直向下广播。

    应用函数:

      np.abs(df), df.apply(function)

    排序:

      对行或者索引进行排序:

        df.sort_index(), df.sort_index(by=['a','b'],axis=1, ascending=False)

      对series值排序,series.order()

      DataFrame按列排序:

        df.sort_values([col], ascending=True)  # default is ascending = True

    数据处理:

      df允许索引重复。df.append()之后groupby可以解决两个df之间索引重复,需要按照某一列groupby的问题。

      pd.concate([df1, df2], ignore_index=True)   # 拼接两个df,忽略索引,直接避免了重复索引。

      df1.combine_first(df2)  # 使用df2中的数据为df1中的数据打补丁。

      df.sum()  # 按列运算, df.mean()

      df.sum(axis=1)  # 左右, df.mean(axis=1)

      df.idxmax(), df.idxmin()  # 返回达到最小或者最大值的索引

      series使用unique()获取唯一值, df[1].unique()

      series可以使用value_counts()对元素进行计数, df["C"].value_counts(),返回结果按照降频排列。

      isin表示一个series的各个值是否在另一个series。

      NAN值处理:dropna,fillna,isnull,notnull

    数据选择: 

      loc for label based indexing or  通过行标签(index)索引行数据,df.loc[“a”]表示选择index为a的那行数据
      iloc for positional indexing 通过行号获取行数据df.iloc[1]获取第一行数据

      ix 结合前两种的混合索引

        df.ix[1] # 通过行号获取数据   

        df.ix['e']  # 通过行标签获取数据

    pandas读取关系数据库数据:

      import pandas.io.sql as sql

      sql.read_frame("select * from <table>", con)  # con is the connection of database

      pandas dataframe转list:首先使用np.array()函数把DataFrame转化为np.ndarray(),再利用tolist()函数把np.ndarray()转为list

    数据转换:

      就地修改index:df.index = df.index.map(lambda x: int(x) + 1)

      重命名标签:

        df.rename(index={"1":"first"}, columns={"count": "quantity"})  # 通过字典实现一部分标签的重命名。

        df.rename(index=np.str, columns=str.upper)  # index转换为字符串,columns大写。

        这样会重新生成一个df,如果想要就地修改,传入inplace=True,df.rename(index={"1":"first"}, columns={"count": "quantity"}, inplace=True)

    数据聚合:

      df.groupby("A").quantile(0.9)  # 求分位置数

      df.groupby("E").agg("Here could define you function")  # 传入任意函数

      df.groupby("A").sum()  # "A"列会被当做索引

      df.groupby("A", group_keys=False).apply(sum)  # group_keys用于在使用apply时确定是否将group key当做索引。使用False在最终结果中也会保留group key.

      df.groupby("a")["b"].sum()  # 按照“a”groupby之后,只对column b 进行sum()

    数据对齐:

      df.align(df1, join="inner")

    重采样:

      df.resample()

      频率转换和重对齐的两大工具是resample和reindex,resample用于使数据符合一个新的频率,reindex使数据符合一个新的索引。

    判断DataFrame为空:

      df.empty

  • 相关阅读:
    [Go] 解决空接口 interface{} cannot use (type []string) as type []interface {}
    [Linux] 脚本中的set -e有什么作用
    [Go] 解决go test 时 testing: warning: no tests to run
    [Go] go for range循环map是无序的 变成有序
    [Linux] ubuntu 32位 i686 安装docker
    [Git] git checkout 恢复未add的修改文件
    [MySQL] in 子查询出现DEPENDENT SUBQUERY问题
    [MySQL] group by 聚合函数的原理和聚合限制原因SELECT list is not in GROUP BY clause and contains nonaggregated column
    [MySQL]mysql的ANY_VALUE()函数 解决 ONLY_FULL_GROUP_BY 模式
    [Go] GODEBUG=inittrace=1 查看所有执行的init函数
  • 原文地址:https://www.cnblogs.com/buxizhizhoum/p/8433552.html
Copyright © 2011-2022 走看看