python & dataframe 操作 小汇总 1

一、is和==的区别:

is 判断两个变量是否是引用同一个内存地址。 所以判断是否数据为Nonetype的时候可以直接使用判断 if XXX is None: print()

== 判断两个变量是否相等。

如果不用 a = b 赋值,int 型时,在数值为 -5~256(64位系统)时,两个变量引用的是同一个内存地址,其他的数值就不是同一个内存地址了。

 

二、pandas填充数据 fillna

1.填充Nonetype

df_train['keyword'].replace(to_replace=[None],value='None',inplace=True)

填充nan:

2.常数:没用inplace,所以要重新赋值

all_data['Cabin'] = all_data['Cabin'].fillna('Unknown')

3.字典列填充:

all_data['Cabin'] = all_data['Cabin'].fillna({0:10,1:20,2:30})

4.指定inplace

指定inplace=true才会修改你所要操作的dataframe

5.method = 'ffill'/'pad':用前一个非缺失值去填充该缺失值、


#1.method = 'ffill'/'pad':用前一个非缺失值去填充该缺失值
 
df2.fillna(method='ffill')

6.method = 'bflii'/'backfill':用下一个非缺失值填充该缺失值

#2.method = 'bflii'/'backfill':用下一个非缺失值填充该缺失值
 
df2.fillna(method='bfill')

7.指定limit 填充2个

df2.fillna(method='bfill', limit=2)

8.指定axis,axis=1为按行操作

df2.fillna(method="ffill", limit=1, axis=1)

 

填充部分致谢:https://blog.csdn.net/weixin_39549734/article/details/81221276

 

三、pandas数据替换 replace

1.df.replace(to_replace, value) 前面是需要替换的值,后面是替换后的值。

 

df_train['keyword'].replace(to_replace=[None],value='None',inplace=True)

2.对某一列特定值进行替换

result['prediction'].replace([0,1,2,3,4,5,6,7,8],[870,870,880,898,1300,13117,13298,13690,13691],inplace=True)

*注意:不指定列就会对所有列进行操作,不指定inplace不会修改原dataframe

 

四、pandas loc

1.check data

>>> data = {'amount': [100, 200, 300, 400, 500],
...             'name': ['', '商品1', '商品3', '', '商品3']}
>>> df = pd.DataFrame(data)
>>> df
   amount name
0     100
1     200  商品1
2     300  商品3
3     400
4     500  商品3
>>> df.loc[0][1]
''
>>> df.loc[0][0]
100

2.利用loc定位赋值的方法见下面:

五、pandas 新增一列 并且赋值

 

注意列名用中括号和用 .列名的区别,个人感受:

如果列名里面有空格或者数字就不要用点了,用点比较省事~

 

致谢:Pandas新增一列并按条件赋值? - 知乎 (zhihu.com)

方法1:利用lamba 注意:x.name 有特殊含义,不要定义为name,以下只为表达意思,修改一下df.rename(columns={'name':'list','amount':'AAA'},inplace=True)

    df['x1'] = df.apply(lambda x: x.amount if x.name != "" else 0, axis=1)

方法2:

df['x2'] = np.where(df['name'] == '', 0, df['amount'])

方法3:

df['x4'] = df['amount']
df.loc[df['name'] == '', 'x4'] = 0

 

按照指定值利用loc进行赋值:

先用age定位到age是空置的地方,赋值列age为你预测的值

    all_data.loc[(all_data.Age.isnull()),'Age']=predictedAges

 

方法1-3详细代码:

import pandas as pd
import numpy as np

if __name__ == '__main__':
    data = {'amount': [100, 200, 300, 400, 500],
            'name': ['', '商品1', '商品3', '', '商品3']}

    df = pd.DataFrame(data)

    # 杨航锋的方法
    df['x1'] = df.apply(lambda x: x.amount if x.name != "" else 0, axis=1)

    # 张翼轸的方法
    df['x2'] = np.where(df['name'] == '', 0, df['amount'])

    df['x3'] = df['amount'].where(df['name'] != '', 0)

    df['x4'] = df['amount']
    df.loc[df['name'] == '', 'x4'] = 0


    def multiple_columns(row):
        out = {}
        out['double_amount'] = row['amount'] * 2
        out['empty_name'] = not row['name']
        return pd.Series(out)


    df[['double_amount', 'empty_name']] = df.apply(multiple_columns, axis=1)
    print(df)

六、根据条件选取列

1.直接写在[]里面

    fare = all_data[(all_data['Embarked'] == "S") & (all_data['Pclass'] == 3)].Fare.median()

2.利用loc,效果和上面一样

 b=df.loc[df['AAA']>300]

如果取某些列就在后面加上[]或者.列名

3.选取某列是否属于某个列表的数值之一 用 isin

df.loc[df[‘column_name’].isin(some_values)]

4.多种条件的选取 用 &

df.loc[(df[‘column’] == some_value) & df[‘other_column’].isin(some_values)]

5.选取不等于某些值的行记录 用 !=

df.loc[df[‘column_name’] != some_value]

6.isin返回一系列的数值,如果要选择不符合这个条件的数值使用~

df.loc[~df[‘column_name’].isin(some_values)]


此部分致谢:https://blog.csdn.net/changzoe/article/details/82348913

七、生成dataframe

1.numpy 生成矩阵转成dataframe

>>> df2 = pd.DataFrame(np.random.randint(0,10,(5,5)))
>>> df2
   0  1  2  3  4
0  8  7  9  6  6
1  9  7  7  7  2
2  3  4  7  4  6
3  0  5  8  1  7
4  5  3  3  6  6


>>> np.random.randint(0,10,(5,5))
array([[8, 7, 6, 3, 1],
       [9, 4, 9, 4, 1],
       [4, 2, 7, 2, 7],
       [0, 6, 6, 7, 1],
       [1, 4, 8, 5, 0]])

2.指定行列生成

>>> dates = np.arange(20190809,20190815)
>>> df1 = pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=["A","B","C","D"])
>>> df1
           A   B   C   D
20190809   0   1   2   3
20190810   4   5   6   7
20190811   8   9  10  11
20190812  12  13  14  15
20190813  16  17  18  19
20190814  20  21  22  23

八、最常用的几个命令

致谢:Python之NumPy(axis=0 与axis=1)区分 - caiqingfei - 博客园 (cnblogs.com)

pandas速查手册(中文版) - 布尔先生 - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值