# 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])