import numpy as np
import pandas as pd
Q2 = pd.read_excel('F:\AnacondaProjects\mathmodel\data\Question2.xlsx')
input_data = pd.read_excel('F:\AnacondaProjects\mathmodel\data\InputData.xlsx')
Q2.insert(3,'Arrival_type',None) #在Q2的列索引为3的位置插入新的列,名为Arrival_type,用None填充
Q2.insert(3,'Arrival_model',None) #同上
DataFrame格式的逐行筛选并更改数据使用如下代码:
for i in range(len(Q2)):
temp = input_data[(input_data['到达日期']==Q2.loc[i,'Arrival_Date']) & (input_data['到达航班']==Q2.loc[i,'Arrival_Flight'])]
if temp.empty: #temp是将符合条件的项目提取出来,为了表示简单,temp仍是Df格式!!
num_droped +=1 #当temp为空时,temp.values[0]会报错,所以要排除这种情况
Q2.drop([i],inplace=True) #问题需要,遇到空值时删除第i行数据
continue #跳出本次循环,进行下一次循环
Q2.loc[i,'Arrival_model'] = temp['飞机型号'].values[0] #因为temp是df格式,所以取值时要用这个函数,否则会报错,Series不匹配之类的。。
Q2.loc[i,'Arrival_type'] = temp['到达类型'].values[0] #temp['飞机型号']返回的其实是列,所以用它给别的变量赋值时不能用这个函数
注意:
定位Q2的某一行使用Q2.loc函数,格式为
Q2.loc[i,'Arrival_Date'] #定位置Q2中行索引为i,列名为'Arrival_Date'的元素,返回的是对应的元素,int,str之类的数据类型
此时Q2的index是不会变的,也就是说,当上面Q2.drop函数删除了几行时,生成的Q2索引就会跳过被删除的行,于是所以就出现了断层,所以使用reset_index函数重新生成索引
Q2 = Q2.reset_index(drop=True)
https://blog.csdn.net/qq_38788128/article/details/80769292DataFrame的行列转置操作,十分强大,整合数据用
pandas读取的excel表格中含有日期时,df内会以timestamp格式存储,所以无法与'2018-09-17'这种形式的字符串做对比,
解决方法:读取excel后再保存为csv格式,然后读取csv格式的文件即可