美文网首页
Pandas杂杂的笔记

Pandas杂杂的笔记

作者: 辰雨蒋_python | 来源:发表于2020-04-17 15:34 被阅读0次

    0. Background

    在Pandas学习过程中的一些使用的案例和想法
    等杂杂笔记堆放太满了,再重新整理吧。现在就简单堆叠一下,上面放感觉新鲜的,末尾放基础的。

    下面链接是比较值得过一下的资料:
    pandas官方文档
    实验楼的Pandas百题大冲关 非常适合pandas学差不多了,过一遍巩固。

    1. 这部分放依然有新鲜感的

    • Vlookup 用merge on left实现
      merge中需要注意的一些参数:连接方式how,键值left_on, right_on, 使用索引链接left_index,
      用suffixes可以用来区分数据来源或增加备注(也可直接“ ”)
    pd.merge(left = , right =, left_index=Ture,right_index=True, suffixes("","_right"))
    
    • df.map用于做简单的多值数据替换
      是将函数和数组作为参数,将函数应用于数组中的每一项。不用编写循环且耗时更少。
      dic = {"旧值1":"新值1", "旧值2":"新值1"}
      df["col_new"] = df["col_old"].map(dic)
    
    df = pd.DataFrame({'name': ['Alice', 'Bob', 'Candy', 'Dany', 'Ella',
                                'Frank', 'Grace', 'Jenny'],
                       'grades': [58, 83, 79, 65, 93, 45, 61, 88]})
    def choice(x):
        if x > 60:
            return 1
        else:
            return 0
    df.grades = pd.Series(map(lambda x: choice(x), df.grades))
    
    • df.apply() 用于创造新列,输入计算需要已有其他列的情况
    def rule(x,y):
      if x == "high" and y > 10:
        return 1
      else:
        return 0
    df["new"] = df.apply(lambda x: rule(x["C1"],x["C2"]), axis=1)
    
    • 用df_filter专门列出筛选条件
      df_filter= df["ID"].isin([.......])
      df[df_filter]
    
    • %store 在不同JupyterNotebook间传递变量
      在一个notebook上 %store k
      另一个notebook上 %store -r k 即可调用_

    • 对比两个列表元素是否相同

    A.intersection(B)
    A.difference(B)
    # 建议可以用set(A).intersection(set(B))先去重
    
    • DataFrame 中每个元素减去每一行的平均值
    df = pd.DataFrame(np.random.random(size=(5, 3)))
    df.sub(df.mean(axis=1), axis=0)    (算点收益率什么的应该会比较方便把)
    
    • 时间序列
    1. 建立时间序列索引
    dti = pd.date_range(start='2018-01-01', end='2018-12-31', freq='D')
    data = np.random.rand(len(dti))
    s = pd.Series(data, index=dti)
    s
    2018-01-01    0.991481
    2018-01-02    0.988274
                    ...
    2018-12-30    0.307693
    2018-12-31    0.768305
    
    2. 统计s中的每个月的mean
    s.resample('M').mean()
    
    2. 时间转换
    s = pd.date_range('today', periods=100, freq='S')
    ts = pd.Series(data, index=s)
    ts.resample('Min').sum() # 秒转分钟
    
    • Max-Min 归一化

      有时候,DataFrame 中不同列之间的数据差距太大,需要对其进行归一化处理.其中,Max-Min 归一化是简单而常见的一种方式,公式如下: image.png
    def normalization(df):
        numerator = df.sub(df.min())
        denominator = (df.max()).sub(df.min())
        Y = numerator.div(denominator)
        return Y
    df = pd.DataFrame(np.random.random(size=(5, 3)))
    -----------------------------------------------------------------------
              0         1         2   #原数据
    0  0.068466  0.942762  0.795099
    1  0.831463  0.028050  0.603929
    2  0.136350  0.826835  0.865010
    3  0.595750  0.247326  0.328010
    4  0.425220  0.209596  0.154659
    ------------------------------------------------------------------
    normalization(df)
              0         1         2   #normalization后
    0   0.000000    1.000000    0.901582
    1   1.000000    0.000000    0.632463
    2   0.088971    0.873265    1.000000
    3   0.691070    0.239722    0.244036
    4   0.467569    0.198474    0.000000
    

    2. 这部分放已经看厌倦了但是先留着偶尔瞄一下防止失忆的

    • DataFrame用.copy()进行赋值
      df2=df1只是建立了指针,df2会随df1变化而变化
      用df2 = df1.copy() 此处默认deep=True哦
    • 类比if 函数 (复习列表生成器)
      df[“sign”] = ["+" if x > 0 else "-" for x in df["return"]]
      sales = pd.merge)sales, states, how = "left", on=“City”
    • df["col_name"].unique()
    • df.loc( )对比df.at( )
    • 最大显示行列设置
      pd.set_option("display.max_rows",100)
      pd.set_option("display.max_columns",None) # 全部显示
    • 旧数据列整理好了,更换成新列
    df = df.drop("old_col", axis=1)
    df = df.join( df["new_col"] )
    

    3. 这部分随便堆点东西

    • 缺失值操作
      df.fillna(value = )
      df.dropna(how="any")

    • 文件读写
      df.to_csv("---.csv") .to_excel(" .xlsx", sheet_name = " ")
      df = pd.read_csv(path) .read_excel(path, "Sheet1", index_col = None, na_values = ["NA"])

    • df.sort_values(by = " ")
      进阶多条件排序:df.sort_values([col1,col2],ascending=[True,False])

    • Series计算是按照索引计算的,索引不同的填充为NaN
      s1.add(2) 模式.sub() .mul() .div()
      s1.median()模式 .sum() .max() .min()

    • df.mean() 会每个col求一个数出来
      可以用df["col"].sum()针对单独列求和

    • 按关键字查询 df3[df3['animal'].isin(['cat', 'dog'])]

    • sales.pivot_talbe(index = "City", values = "Sales", aggfunc = "sum")

    • df.set_index("col_name")
      df.reset_index() 把index扔回到col里面去

    相关文章

      网友评论

          本文标题:Pandas杂杂的笔记

          本文链接:https://www.haomeiwen.com/subject/hcaevhtx.html