赞
踩
目录
2.使用 df.insert(loc, column, value, allow_duplicates = False) 函数
2.df.append(obj,ignore_index=False,verify_integrity=False,sort=False)
增删改可能需要筛选数据,关于数据的条件筛选可见文章:
DataFrame数据的筛选和排序_dataframe筛选_带带琪宝的博客-CSDN博客
相当于新增一不存在的列,可以使用已存在的数据列进行运算得到新列,比如在数据最后后面多加一列成交率:
- print(data2.head(3))
- data2['成交率']=data2['客单数']/data2['客流量']
- print(data2.head(3))
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
-
- 日期 星期 门店号 码洋 天气 ... 客单数 交易数量 月份 门店 成交率
- 0 2023-01-31 二 1001 8105.611548 NaN ... 859 2004 1 龙华店 0.544705
- 1 2023-01-31 二 1002 8117.412956 NaN ... 752 1462 1 石岩店 0.540230
- 2 2023-01-31 二 1003 9369.565960 NaN ... 949 1258 1 观澜店 0.571343
比如,我想在根据日期在第二列加一列 season:
- print(data2.head(3))
-
- season_col=[]
- for i in range(len(data2)):
- if data2['日期'].dt.month[i]>=1 and data2['日期'].dt.month[i]<=3:
- season_col.append(1)
- elif data2['日期'].dt.month[i]>3 and data2['日期'].dt.month[i]<=6:
- season_col.append(2)
- elif data2['日期'].dt.month[i] > 6 and data2['日期'].dt.month[i] <= 9:
- season_col.append(3)
- elif data2['日期'].dt.month [i]> 9 and data2['日期'].dt.month[i] <= 12:
- season_col.append(4)
- data2.insert(1,'season',season_col)
-
- print(data2.head(3))
-
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 season 星期 门店号 码洋 ... 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 1 二 1001 8105.611548 ... 1577 859 2004 1 龙华店
- 1 2023-01-31 1 二 1002 8117.412956 ... 1392 752 1462 1 石岩店
- 2 2023-01-31 1 二 1003 9369.565960 ... 1661 949 1258 1 观澜店
(1)df.column=['column1','column2',...]
这种方法可以对所有列名进行修改,要求列表内的长度与旧列名的长度一致
(2)df.rename(columns={'oldname1':'newname1','oldname2':'newname2'},inplace=FALSE/TURE})
这种方法可以只对某些列名修改,inplace=True时会在原Datafram上进行更改,rename 也可以修改 axis 参数用于修改行索引
(3)也可以在导数据的时候直接采用新的列名
(1)df['column']=value,类似直接增加列的方法,赋值
可以将某列修改为定值,或利用 list/array 进行修改,以及Series和DataFrame可以修改,但需要索引对齐,否则会出错(不报错,全为空)
- print(data2.head(3))
- data2['天气']='晴'
- print(data2.head(3))
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 晴 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 晴 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 晴 9369.565960 1661 949 1258 1 观澜店
(2)利用df.replace(to_replace,value,inplace,...):可进行部分数据的更改
to_replace:确定需要修改列值的数据。可接受的数据类型有:str, regex, list, dict, Series, int, float, or None
value:指定修改后的值。可接受的数据类型有:scalar, dict, list, str, regex, default None
inplace:是否本地置换
limit:指定前后填充的最大次数
regex:正则表达式符号。如果在to_replace中使用字符串形式的正则表达式对数据进行筛选的时候,需要将其设置为True。
method:填充方式。‘pad’, ‘ffill’, ‘bfill’, None
- print(data2.head(3))
- data2['月份'].replace(1,'01',inplace=True)
- print(data2.head(3))
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 01 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 01 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 01 观澜店
(3)筛选满足条件的值修改
del 删除列会直接改变原 DataFrame
- print(data2.head(3))
- del data2['天气']
- print(data2.head(3))
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 星期 门店号 码洋 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 9369.565960 1661 949 1258 1 观澜店
dt.drop(labels = ['column1','column2'], axis = 1,inplace =FALSE),inplace 默认False,为TRUE 时,会修改原 DataFrame
- print(data2.head(3))
- df=data2.drop(labels = ['天气','码洋'], axis = 1) # 将删除列后的数据赋给df
- print(data2.head(3)) # 未改变
- print(df.head(3))
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 星期 门店号 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 1661 949 1258 1 观澜店
区别见:DataFrame中删除操作pop和drop的区别_dataframe pop-CSDN博客
建议用 pop(),代码简洁且有返回值,数据还可以继续使用
- print(data2.tail(3))
- print(len(data2))
- data2.loc[len(data2)]=['2023-04-02','日','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN']
- data2.info()
-
- 日期 星期 门店号 码洋 天气 ... 客流量 客单数 交易数量 月份 门店
- 4265 2023-04-01 六 3008 383.240643 NaN ... 1591 649 1363 4 惠州店
- 4266 2023-04-01 六 3009 5739.039035 NaN ... 1443 901 2294 4 佛山店
- 4267 2023-04-01 六 3010 9178.243621 NaN ... 1975 663 2122 4 福州店
- [3 rows x 11 columns]
-
- 4268
-
- <class 'pandas.core.frame.DataFrame'>
- Index: 4269 entries, 0 to 4268
- Data columns (total 11 columns):
- # Column Non-Null Count Dtype
- --- ------ -------------- -----
- 0 日期 4269 non-null object
- 1 星期 4269 non-null object
- 2 门店号 4269 non-null object
- 3 码洋 4269 non-null object
- 4 天气 333 non-null object
- 5 实洋 4269 non-null object
- 6 客流量 4269 non-null object
- 7 客单数 4269 non-null object
- 8 交易数量 4269 non-null object
- 9 月份 4269 non-null object
- 10 门店 4268 non-null object
- dtypes: object(11)
-
数据类型不同也可插入,但某列类型将变为object
采用通过 loc[ ] 建索引赋值的方法多适用于对 dataframe 循环遍历添加行,可以避免索引冲突的问题。
在新一点的版本里为dt._append(),该方法会在 DataFrame 末尾行追加数据(原数据不发生改变),可以添加多行,相当于添加一个dataframe,另一个 df 没有的列,其值为NaN,形状取并集
参数:
同时使用时,ignore_index优先生效,同时使用不会报错。
- print(data2)
- df2=data2.copy()
- df2['new_col']=0 # 添加一列全为0的列
- print(df2)
- data=data2._append(df2,ignore_index=True)
- print(data)
- data2:
- 日期 星期 门店号 码洋 天气 ... 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN ... 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN ... 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN ... 1661 949 1258 1 观澜店
- ... ... .. ... ... ... ... ... ... ... .. ...
- 4265 2023-04-01 六 3008 383.240643 NaN ... 1591 649 1363 4 惠州店
- 4266 2023-04-01 六 3009 5739.039035 NaN ... 1443 901 2294 4 佛山店
- 4267 2023-04-01 六 3010 9178.243621 NaN ... 1975 663 2122 4 福州店-
- [4268 rows x 11 columns]
-
- df2:
- 日期 星期 门店号 码洋 天气 ... 客单数 交易数量 月份 门店 new_col
- 0 2023-01-31 二 1001 8105.611548 NaN ... 859 2004 1 龙华店 0
- 1 2023-01-31 二 1002 8117.412956 NaN ... 752 1462 1 石岩店 0
- 2 2023-01-31 二 1003 9369.565960 NaN ... 949 1258 1 观澜店 0
- ... ... .. ... ... ... ... ... ... .. ... ...
- 4265 2023-04-01 六 3008 383.240643 NaN ... 649 1363 4 惠州店 0
- 4266 2023-04-01 六 3009 5739.039035 NaN ... 901 2294 4 佛山店 0
- 4267 2023-04-01 六 3010 9178.243621 NaN ... 663 2122 4 福州店 0
- [4268 rows x 12 columns]
-
- data:
- 日期 星期 门店号 码洋 天气 ... 客单数 交易数量 月份 门店 new_col
- 0 2023-01-31 二 1001 8105.611548 NaN ... 859 2004 1 龙华店 NaN
- 1 2023-01-31 二 1002 8117.412956 NaN ... 752 1462 1 石岩店 NaN
- 2 2023-01-31 二 1003 9369.565960 NaN ... 949 1258 1 观澜店 NaN
- ... ... .. ... ... ... ... ... ... .. ... ...
- 8533 2023-04-01 六 3008 383.240643 NaN ... 649 1363 4 惠州店 0.0
- 8534 2023-04-01 六 3009 5739.039035 NaN ... 901 2294 4 佛山店 0.0
- 8535 2023-04-01 六 3010 9178.243621 NaN ... 663 2122 4 福州店 0.0
- [8536 rows x 12 columns]
-
使用位置索引删除数据,不修改原数据,标签找不到会报错
语法和上面的 drop 列相同,删除连续行或筛选后删除,也可使用 index 进行删除
- print(data2.head(3))
- # 删一行
- df1=drop(0)
- df2=data2.drop(labels=range(2,4))
- # 想删除某几行,只能用逗号隔开,或用range()函数,不能直接labels=[1:2]这样
- print(df2.head(3))
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 4 2023-01-31 二 1006 9961.178449 NaN 9961.178449 1290 968 2537 1 公明店
rename,同修改列名一致,axis参数设为0
- print(data2.head(3))
- data2.iloc[0:2,2]=0000
- # 如果写成了loc会新建一列名为“2”的列,前两行为0其余是NaN
- print(data2.head(3))
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 1001 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 1002 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
-
- 日期 星期 门店号 码洋 天气 实洋 客流量 客单数 交易数量 月份 门店
- 0 2023-01-31 二 0 8105.611548 NaN 8105.611548 1577 859 2004 1 龙华店
- 1 2023-01-31 二 0 8117.412956 NaN 8117.412956 1392 752 1462 1 石岩店
- 2 2023-01-31 二 1003 9369.565960 NaN 9369.565960 1661 949 1258 1 观澜店
修改单个值可以通过定位修改,或筛选满足条件的行进行修改,日常使用大批量的数据直接删除后拼接就好了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。