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里面去
网友评论