-读写
import pandas as pd
#读取
day_type = pd.read_excel("./DataFile/2019工作日.xlsx",sheet_name=0, header=0, names=None, index_col=None, usecols=None)
sheet_name:返回指定的sheet
如果将sheet_name指定为None,则返回全表
如果需要返回多个表, 可以将sheet_name指定为一个列表, 例如[‘sheet1’, ‘sheet2’]可以根据sheet的名字字符串或索引来值指定所要选取的sheet
name:如果没有表头, 可用此参数传入列表做表头
header:指定数据表的表头,默认值为0, 即将第一行作为表头
index_col:用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。一般可以设定index_col=False指的是pandas不适用第一列作为行索引。
usecols:读取指定的列, 也可以通过名字或索引值
#写入
day_type.to_excel("./DataFile/DayData.xlsx",index=False)
index:默认为True, 是否加行索引
header:默认为True, 是否加列标
-创建一个dataframe:
df = pd.DataFrame({'A':[100, 200, 300, 400, 500],
'B':['a', 'b', 'c', 'd', 'e'],
'C':[1, 2, 3, 4, 5]})
df
>> A B C
0 100 a 1
1 200 b 2
2 300 c 3
3 400 d 4
4 500 e 5
-基础信息获取
print(len(df.index.values))# 行数 (不包含表头,且以下均如此)
print(df.index.values)# 行索引
print(len(df.columns.values))# 列数
print(df.columns.values)# 列索引
data1 = df.head(7) # 读取前7行的所有数据,dataFrame结构
data2 = df.values #list形式,读取表格所有数据
print("获取到所有的值:\n{0}".format(data1)) #格式化输出
print("获取到所有的值:\n{0}".format(data2)) #格式化输出
-修改
df.loc[1] = 111#将第二行全部换为111
#loc后一个方括号代表一个维度([0][1]代表第一行第二列),
#或是一个方括号里前面是行数后面是列名([2,“C”]代表第三行的“C”列
df.iloc[1:10,2] = 111#将第二行到第十行的第二列改为111
#iloc精准定位,只接受数字
-增加
1.增加行
df.loc[7] = 777#增加index为7的行,其值都是777
#有行索引时可以用loc[索引]来增加行
#若是想改变插入行的位置,可以新增一列用来排序的列:
df["order"] = [1, 3, 4, 5, 6, 2] #将新插入的行赋值2
df1=df.sort_values(by='order') #根据order列排序
df1.reset_index() #重置索引
#最后删掉order列
df=df.drop(columns='order')#或者写为:df.drop(columns='order',inplace=True)
#或者del df['order']
2.增加列
df.insert(0,'zero',[10,11,12,13,14,15])
#df.insert(添加列位置索引序号,添加列名,数值)
#或者是df['zero'] = [10,11,12,13,14,15]
-删除
#行
df.drop(index=2,inplace=True)
#index可为行的索引名
#列
df.drop(columns = 'B', inplace = True)
-筛选
loc无法用于条件筛选,而iloc和列名是可以的。
df.iloc[2,][df.iloc[2,]>1] #找出第三行中大于1的值,需注意保持数据类型一致
df[(df["C"]>1)&(df["C"]<4)] #找到C列中的值大于1且小于4的dataframe,需注意或为|,且为&
-通过筛选来定位赋值
df2.iloc[:,2][df2.iloc[:,0]==d] = df_temp.iloc[:,-2][(df_temp["日期"] == d)&(df_temp.iloc[:,-2] > 0.01)].mean()
#目前唯一可以成功赋值的方法,但是依旧会有warning