pandas教程[4]Dataframe筛选数据!!!!!!!!!!!!!!!!!!!!!!

本文介绍了使用Python的Pandas库进行DataFrame数据筛选的方法。包括基本的条件筛选、多个条件组合筛选以及使用isin方法筛选特定值等技巧。通过具体实例展示了如何高效地筛选和处理数据。
>>> import pandas as pd
>>> import numpy as np
>>> #今天还是用到了DataFrame,如果你用一下它的筛选数据的功能,你会大吃一惊,它非常擅长筛选数据,可以极大提高你的工作效率,废话不多说,下面看看几个进行复杂数据筛选的例子。
>>> #首先我们创建一个DataFrame,该DataFrame包含的数据如下
>>> df=pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))
>>> df
          A         B         C         D
0 -1.108935  1.187163  1.546778  0.246329
1 -0.015045  1.367264 -0.617322 -1.068358
2  0.502788  0.305497 -0.819171 -0.331027
3  2.585354 -0.043285  1.056259 -0.079882
4  0.316549 -1.464567  1.504431  0.803362
5 -1.097251 -0.706594 -1.393058 -0.251690
>>> #假如我们想要筛选D列数据中大于0的行
>>> df[df.D>0]
          A         B         C         D
0 -1.108935  1.187163  1.546778  0.246329
4  0.316549 -1.464567  1.504431  0.803362
>>> #使用&符号可以实现多条件筛选,当然是用"|"符号也可以实现多条件,只不过他是或的关系。
>>> df[(df.D>0)&(df.C<0)]
Empty DataFrame
Columns: [A, B, C, D]
Index: []
>>> df[(df.D<0)&(df.C>0)]
          A         B         C         D
3  2.585354 -0.043285  1.056259 -0.079882
>>> df[(df.D<0.5)&(df.C>1.5)]
          A         B         C         D
0 -1.108935  1.187163  1.546778  0.246329
>>> df[(df.D<0.5)|(df.C>1.5)]
          A         B         C         D
0 -1.108935  1.187163  1.546778  0.246329
1 -0.015045  1.367264 -0.617322 -1.068358
2  0.502788  0.305497 -0.819171 -0.331027
3  2.585354 -0.043285  1.056259 -0.079882
4  0.316549 -1.464567  1.504431  0.803362
5 -1.097251 -0.706594 -1.393058 -0.251690
>>> df[(df.D<0.5)|(df.C>1.52)]
          A         B         C         D
0 -1.108935  1.187163  1.546778  0.246329
1 -0.015045  1.367264 -0.617322 -1.068358
2  0.502788  0.305497 -0.819171 -0.331027
3  2.585354 -0.043285  1.056259 -0.079882
5 -1.097251 -0.706594 -1.393058 -0.251690
>>> #假如我们只需要A和B列数据,而D和C列数据都是用于筛选的,可以这样写:只返回了AB两列数据
>>> df[['A','B']][(df.D>0)&(df.C<0)]
Empty DataFrame
Columns: [A, B]
Index: []
>>> df[['A','B']][(df.D<0)&(df.C>0)]
          A         B
3  2.585354 -0.043285
>>> index = (df.D<0)&(df.C>0)
>>> index
0    False
1    False
2    False
3     True
4    False
5    False
dtype: bool
>>> df(index)
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    df(index)
TypeError: 'DataFrame' object is not callable
>>> df[index]
          A         B         C         D
3  2.585354 -0.043285  1.056259 -0.079882
>>> #我们还可以使用insin方法来筛选特定的值,把要筛选的值写到一个列表里,如alist
>>> alist=[-0.079882,0.687050,0.3685412]
>>> df['D'].isin(alist)
0    False
1    False
2    False
3    False
4    False
5    False
Name: D, dtype: bool
>>> alist=[0.246329]
>>> df['D'].isin(alist)
0    False
1    False
2    False
3    False
4    False
5    False
Name: D, dtype: bool
>>> df[df['D'].isin(alist)]
Empty DataFrame
Columns: [A, B, C, D]
Index: []
>>> df=pd.DataFrame(np.random.normal(6,4),columns=list('ABCD'))
Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    df=pd.DataFrame(np.random.normal(6,4),columns=list('ABCD'))
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\frame.py", line 422, in __init__
    raise ValueError('DataFrame constructor not properly called!')
ValueError: DataFrame constructor not properly called!
>>> df=pd.DataFrame(np.arange(16).reshape(4,4),columns=list('ABCD'))
>>> df
    A   B   C   D
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
>>> alist=[11]
>>> df['D'].isin(alist)
0    False
1    False
2     True
3    False
Name: D, dtype: bool
>>> df[df['D'].isin(alist)]
   A  B   C   D
2  8  9  10  11
>>> 

 

 

 

 

在使用 `xgb.XGBRegressor` 的 `fit` 方法时出现 `ValueError: Boolean array expected for the condition, not object` 错误,通常是因为输入数据中包含非数值类型(如 `object` 类型)的数据,而 XGBoost 模型要求输入数据必须是数值类型。 以下是一些可能的解决办法: #### 查找并处理 `object` 类型列 使用 `DataFrame` 的 `dtypes` 属性查看每列的数据类型,找出 `object` 类型的列,然后进行相应处理。 ```python import pandas as pd import xgboost as xgb # 假设 data 是你的 DataFrame,X 是特征列名列表,y 是目标列名 data = pd.read_csv(r'.\your_file.csv') X = ['col1', 'col2', ...] y = 'target_col' # 查找 object 类型列 object_columns = data[X].select_dtypes(include=['object']).columns # 对 object 类型列进行编码处理 for col in object_columns: le = LabelEncoder() data[col] = le.fit_transform(data[col]) # 创建 XGBRegressor 模型并拟合数据 model = xgb.XGBRegressor() model.fit(data[X], data[y].values) ``` #### 检查缺失值 缺失值也可能导致此类错误,需要确保数据中没有缺失值。可以使用 `dropna()` 方法删除包含缺失值的行,或使用 `fillna()` 方法填充缺失值。 ```python # 删除包含缺失值的行 data = data.dropna() # 或者填充缺失值 data = data.fillna(data.mean()) model.fit(data[X], data[y].values) ``` #### 数据类型转换 确保所有数据类型都是数值类型,可以使用 `astype()` 方法进行转换。 ```python data[X] = data[X].astype(float) model.fit(data[X], data[y].values) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值