pandas 常用增删改查操作、日期格式化


更新日期 2022-03-23

append 上下拼接

## 1、创建空 DataFrame, 但指定列名;一次拼接一行
result_df = pd.DataFrame(columns=['a', 'b', 'c'])
for column_item in data_frame.columns:
    result_df = result_df.append(pd.DataFrame({'a': [column_item],
                                                   'b': [column_item],
                                                   'c': [column_item]}),
                                     ignore_index=True)
## 2、创建空 DataFrame,不指定列名;拼接任意 DataFrame
result_df = pd.DataFrame()
for data_frame in data_frame_list:
    result_df = result_df.append(data_frame)

merge 左右拼接

## 1、拼接两个,指定联接的列
left = pd.DataFrame({'key': ['foo', 'bar'], 'l_val': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'bar'], 'r_val': [3, 4]})
result_frame = pd.merge(left, right, on='key')

## 2、拼接多个,指定联接的列
from functools import reduce
dfs = [a_frame, b_frame, c_frame]
result = reduce(lambda left, right: pd.merge(left, right, on='idx_1', how='left'), dfs)
result.insert(1, 'TRADE_DT', factor_cal_date, allow_duplicates=False)
## 3、使用pandasql
from pandasql import sqldf
all_sql = f'''
select a.name,b.name as b_name,...
    from a_frame as a 
    left join b_frame as b
    where 1=1 
        and a.name = b.name
'''
sql_result_frame = sqldf(panda_sql)

新增一列

## 1、在所有列最后新增
df = pd.DataFrame(np.random.randn(6, 4), columns=list('ABCD'))
s1 = pd.Series(range(1, 7))
# 增加一列
df['E'] = s1  

## 2、指定放入位置
val = 'xxx'
# 放到第二列
result.insert(1, 'column_name', val, allow_duplicates=False)

删除一列

data.pop('column_name')
data.drop('col_name', axis=1, inplace=True)
# 删除一行, drop方法的 axis默认为0
data.drop(col_name, inplace=True)
df.drop(index='2013-01-01')  # index 的类型为 str 时
df.drop(index=pd.to_datetime('2013-01-01'))  # index 的类型为datetime时
df.drop(labels=pd.to_datetime('2013-01-02'))

修改

# 修改某列的位置
# 就是先从列中抽出,再放到指定位置
d = data.pop('a')
# 在第1列的位置,添加列名为a的列d (d是数据)
data.insert(0,'a', d)   

# 修改某列的元素
import numpy as np
df.loc[:, 'a'] = np.array([5] * len(df)) # 修改 a 列为新的值
df['a'] = 1

# 修改某行的元素
import numpy as np
df.loc[pd.to_datetime('2013-01-01'), :] = np.array([5] * len(df)) # 修改第一行的所有值
df.loc['a'] = 1

# 修改某个元素
df.iat[0, 1] = 0
df.at[pd.to_datetime('2013-01-01'), 'A'] = 0

查询

# 查一行
df.loc['a':'b']     # 行a到b之间的行
df.loc['a']         # 行a

# 查一列
df.A        # A列 返回类型:Series
df['A']     # A列 返回类型:Series
df[['A']]   # A列 返回类型:dataFrame
df[['A', 'B']] # A,B 两列

# iloc 取行列
df.iloc[3]  # 第3行
df.iloc[3:5, 0:2]  # 取行3->5, 列 0->2
df.iloc[:, 0:2]    # 取所有行, 列 0->2

获取行数、列数

## 行
df.shape[0]
len(df)
len(df.index)
## 列
df.shape[1]
len(df.columns)

日期

## 格式化
pd.to_datetime('20130102').strftime('%Y-%m-%d')

## 日期->字符串
time.strftime("%Y%m%d")

## 日期<-字符串
import datetime
datetime.datetime.strptime('2021-05-05', '%Y-%m-%d')
pd.Timestamp('20130102')
pd.to_datetime('20130102')

根据列名排序; 横向排序

df.sort_index(axis=1, ascending=False, inplace=True)
# =====>> 更新日期 2022-03-23  =====>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值