pandas.datafram高级查询

2022年1月10日22:47:32 发表评论 390 views
# pandas文件读写
import pandas as pd
# data = pd.read_excel('path') # 其他:csv,json,sql,query,html
# data = pd.read_csv('data.csv', delimiter=',', encoding='utf-8')
# data.to_excel('data.xlsx')
# 数据选取:
data = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=['r1',
'r2', 'r3'], columns=['c1', 'c2', 'c3'])
print('c1',data[['c1']])  # 带name的
print('c1--',data['c1'])
print(data[['c1', 'c3']])  # 多列选取  # 注意双列表格式
# 按行选取:
print(data[1:2])# 第2行
print(data[1:3])# 第2-3行
print(data[-2:])# 第2-3行
# 推荐:
print('*-'*66)
print(data.iloc[2]) # 转置行列(第三行变列)
print(data.iloc[2]['c2'])
print(data.iloc[-1]) # 转置行列

#头数据:
print(data.head(2))

print('*--'*55)
# 实战用法:选行,然后选列
print(data.iloc[0:2][['c1', 'c3']])
print(data.iloc[0:2]['c1'])
print('*'*55)
# 同时选取行和列  # 可
print(data.loc[['r1', 'r2'], ['c1', 'c3']])
print(data.loc[['r2','r1'], ['c1', 'c3']])
print(data.iloc[0:2, [0, 2]])  # 多个i 使用数字做索引 重要
print(data.iloc[:-1, [0, 2]],'000')  # 按数字选取某几列
print(data.iloc[::-1, [0, 2]],'000')  # 按数字选取某几列(并倒序,步进-1)
print('*'*55)

# 数据筛选:
print(data[data['c1']>1])  # 除了c1不大于1 剩余所有的
print(data[(data['c1']>1)&(data['c2']==5)]) # 格式牢记
print(data[(data['c1']>1)|(data['c2']==5)]) # 格式牢记
print(data.columns.values.tolist())  # 查询相关索引
print(data.columns[0],999)
print(data.columns,999)
print(data[data.columns[1]],999)
print(data._stat_axis.values.tolist())
#查找某列的某个值
print(data[data['c1']==4],'44444')
print(data[data['c1']==4].index.tolist(),'44444')# 并返回行号,排序,值
print(data[data['c1'].isin([4,7])])#
print(data[data['c1'].isin([4,7])].index.tolist())#
#查找某行的某值
print(list(data.iloc[1]).index(5),'666')# 转为列表查询

# 数据排序:
print(data.sort_values(by='c2',ascending=False))  #降序
print(data.sort_values(by='c2',ascending=True))  #升序
print(dfs.sort_values(by=[0,2],ascending=[False,False])) # 多列排序
print('*'*55)

# 删除:
print(data.drop(columns='c1'))
print(data.drop(columns=['c1','c2']))

# 其他高级函数:
import pandas as pd
# 拼接:
df1 = pd.DataFrame({'公司': ['恒盛', '创锐', '快学'], '分数': [90, 95,
85]})
df2 = pd.DataFrame({'公司': ['恒盛', '创锐', '京西'], '股价': [20,
180, 30]})
df3 = pd.merge(df1,df2)
print(pd.merge(df1,df2)) #根据相同列名进行合并,删除多余的行(inner交集,内连接)
print(pd.merge(df1,df2,on='公司')) #同名不止一个用on指定
print(pd.merge(df1,df2,how='outer')) #外连接填充NaN
    公司    分数     股价
0  恒盛  90.0   20.0
1  创锐  95.0  180.0
2  快学  85.0    NaN
3  京西   NaN   30.0
print(pd.merge(df1,df2,how='left')) #外连接填充NaN
    公司  分数     股价
0  恒盛  90   20.0
1  创锐  95  180.0
2  快学  85    NaN
# 按行索引进行合并
print(pd.merge(df1,df2,left_index=True,right_index=True)) #按行合并
# 直接拼接:
print(pd.concat([df1,df2],sort=False))  # 默认纵向拼接axis=0,并合并添加新字段
print(pd.concat([df1,df2],axis=1))  # 横向拼接
# append拼接:
print(df1.append({'公司':'AA','分数':'90'},ignore_index=True))

# 字符串转日期时间
# 转换为时间类型
df["date"] = pd.to_datetime(df["date"], format='%Y-%m-%d')
# 获取年
df["year"] = pd.to_datetime(df["date"]).dt.year
# 获取月
df["month"] = pd.to_datetime(df["date"]).dt.month
# 获取日
df["day"] = pd.to_datetime(df["date"]).dt.day
# 获取周
df["week"] = pd.to_datetime(df["date"]).dt.week
print(df)
print(df.dtypes)

# 按时间筛选
    searchtime = time.strptime('20211109-01:55:33','%Y%m%d-%H:%M:%S')
    print(searchtime)
    ddd=pd.datetime.strptime('20211109-01:55:33','%Y%m%d-%H:%M:%S')
   i[0]=i[0].apply(lambda x:x.strftime('%Y%m%d-%H:%M:%S'))  #时间转字符串方法
    print(dfs[dfs[0]<ddd])



发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: