Pandas杂杂的笔记

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里面去

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容