pandas筛选、更改数据

 

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格式的文件即可

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Pandas 中,你可以使用 `~` 操作符来反向筛选数据。例如: ``` import pandas as pd df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [True, False, True, False]}) # 反向筛选出所有 B 列为 False 的行 result = df[~df['B']] print(result) ``` 输出: ``` A B 1 2 False 3 4 False ``` ### 回答2: 在pandas中,我们可以使用"~"运算符来进行反向筛选数据。"~"运算符可以应用于布尔条件,将其翻转。 假设我们有一个DataFrame对象df,其中包含了一列名为"age"的年龄数据。我们想要筛选出年龄不等于25的所有行数据。可以使用如下代码: filtered_data = df[~(df['age'] == 25)] 首先,我们使用df['age'] == 25创建了一个布尔条件,该条件返回True表示年龄等于25的行。然后,在布尔条件外加上"~"运算符,实现翻转。最后,将该布尔条件传递给df[]操作符,从而将筛选后的数据返回给filtered_data。 另外,我们也可以使用loc[]方法来实现反向筛选数据。使用loc[]方法的好处是可以同时选择行和列。例如,使用以下代码可以实现相同的目标: filtered_data = df.loc[~(df['age'] == 25), :] 在loc[]方法中,我们使用布尔条件作为行索引,":"表示选择所有列。再次,在布尔条件之前添加"~"运算符实现反向筛选。 无论选择哪种方法,都可以通过使用"~"运算符来反向筛选pandas数据。 ### 回答3: 在Pandas中,可以使用~(波浪线)来实现反向筛选数据的操作。具体步骤如下: 首先,我们需要根据特定的条件进行数据筛选。例如,我们有一个名为df的DataFrame,并且我们希望筛选出其中某一列满足特定条件的数据。 可以使用语法df[column_name] < condition来实现条件筛选,其中column_name是列名,condition是满足的条件。 接下来,我们可以使用~运算符来反向筛选数据。只需在条件前面加上~即可。 例如,我们可以使用以下语法来反向筛选出df中某列不满足特定条件的数据: filtered_data = df[~(df[column_name] < condition)] 这将返回一个新的DataFrame对象filtered_data,其中包含不满足条件的数据。 需要注意的是,波浪线~必须放在整个条件的外部,以确保正确的逻辑运算顺序。 使用这种方法,我们可以方便地对数据进行反向筛选,得到我们所需的结果。通过修改条件以及列名,可以在实际应用中灵活使用此方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值