pandas教程:Dataframe筛选数据

  1. 原文连接: https://blog.csdn.net/hnanxihotmail/article/details/81625854

  2. >>> import pandas as pd

  3. >>> import numpy as np

  4. >>> #今天还是用到了DataFrame,如果你用一下它的筛选数据的功能,你会大吃一惊,它非常擅长筛选数据,可以极大提高你的工作效率,废话不多说,下面看看几个进行复杂数据筛选的例子。

  5. >>> #首先我们创建一个DataFrame,该DataFrame包含的数据如下

  6. >>> df=pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))

  7. >>> df

  8. A B C D

  9. 0 -1.108935 1.187163 1.546778 0.246329

  10. 1 -0.015045 1.367264 -0.617322 -1.068358

  11. 2 0.502788 0.305497 -0.819171 -0.331027

  12. 3 2.585354 -0.043285 1.056259 -0.079882

  13. 4 0.316549 -1.464567 1.504431 0.803362

  14. 5 -1.097251 -0.706594 -1.393058 -0.251690

  15. >>> #假如我们想要筛选D列数据中大于0的行

  16. >>> df[df.D>0]

  17. A B C D

  18. 0 -1.108935 1.187163 1.546778 0.246329

  19. 4 0.316549 -1.464567 1.504431 0.803362

  20. >>> #使用&符号可以实现多条件筛选,当然是用"|"符号也可以实现多条件,只不过他是或的关系。

  21. >>> df[(df.D>0)&(df.C<0)]

  22. Empty DataFrame

  23. Columns: [A, B, C, D]

  24. Index: []

  25. >>> df[(df.D<0)&(df.C>0)]

  26. A B C D

  27. 3 2.585354 -0.043285 1.056259 -0.079882

  28. >>> df[(df.D<0.5)&(df.C>1.5)]

  29. A B C D

  30. 0 -1.108935 1.187163 1.546778 0.246329

  31. >>> df[(df.D<0.5)|(df.C>1.5)]

  32. A B C D

  33. 0 -1.108935 1.187163 1.546778 0.246329

  34. 1 -0.015045 1.367264 -0.617322 -1.068358

  35. 2 0.502788 0.305497 -0.819171 -0.331027

  36. 3 2.585354 -0.043285 1.056259 -0.079882

  37. 4 0.316549 -1.464567 1.504431 0.803362

  38. 5 -1.097251 -0.706594 -1.393058 -0.251690

  39. >>> df[(df.D<0.5)|(df.C>1.52)]

  40. A B C D

  41. 0 -1.108935 1.187163 1.546778 0.246329

  42. 1 -0.015045 1.367264 -0.617322 -1.068358

  43. 2 0.502788 0.305497 -0.819171 -0.331027

  44. 3 2.585354 -0.043285 1.056259 -0.079882

  45. 5 -1.097251 -0.706594 -1.393058 -0.251690

  46. >>> #假如我们只需要A和B列数据,而D和C列数据都是用于筛选的,可以这样写:只返回了AB两列数据

  47. >>> df[['A','B']][(df.D>0)&(df.C<0)]

  48. Empty DataFrame

  49. Columns: [A, B]

  50. Index: []

  51. >>> df[['A','B']][(df.D<0)&(df.C>0)]

  52. A B

  53. 3 2.585354 -0.043285

  54. >>> index = (df.D<0)&(df.C>0)

  55. >>> index

  56. 0 False

  57. 1 False

  58. 2 False

  59. 3 True

  60. 4 False

  61. 5 False

  62. dtype: bool

  63. >>> df(index)

  64. Traceback (most recent call last):

  65. File "<pyshell#19>", line 1, in <module>

  66. df(index)

  67. TypeError: 'DataFrame' object is not callable

  68. >>> df[index]

  69. A B C D

  70. 3 2.585354 -0.043285 1.056259 -0.079882

  71. >>> #我们还可以使用insin方法来筛选特定的值,把要筛选的值写到一个列表里,如alist

  72. >>> alist=[-0.079882,0.687050,0.3685412]

  73. >>> df['D'].isin(alist)

  74. 0 False

  75. 1 False

  76. 2 False

  77. 3 False

  78. 4 False

  79. 5 False

  80. Name: D, dtype: bool

  81. >>> alist=[0.246329]

  82. >>> df['D'].isin(alist)

  83. 0 False

  84. 1 False

  85. 2 False

  86. 3 False

  87. 4 False

  88. 5 False

  89. Name: D, dtype: bool

  90. >>> df[df['D'].isin(alist)]

  91. Empty DataFrame

  92. Columns: [A, B, C, D]

  93. Index: []

  94. >>> df=pd.DataFrame(np.random.normal(6,4),columns=list('ABCD'))

  95. Traceback (most recent call last):

  96. File "<pyshell#27>", line 1, in <module>

  97. df=pd.DataFrame(np.random.normal(6,4),columns=list('ABCD'))

  98. File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas\core\frame.py", line 422, in __init__

  99. raise ValueError('DataFrame constructor not properly called!')

  100. ValueError: DataFrame constructor not properly called!

  101. >>> df=pd.DataFrame(np.arange(16).reshape(4,4),columns=list('ABCD'))

  102. >>> df

  103. A B C D

  104. 0 0 1 2 3

  105. 1 4 5 6 7

  106. 2 8 9 10 11

  107. 3 12 13 14 15

  108. >>> alist=[11]

  109. >>> df['D'].isin(alist)

  110. 0 False

  111. 1 False

  112. 2 True

  113. 3 False

  114. Name: D, dtype: bool

  115. >>> df[df['D'].isin(alist)]

  116. A B C D

  117. 2 8 9 10 11

  118. >>>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pandas DataFrame 中可以使用布尔索引来筛选数据。可以使用单独的列或多个列进行筛选,并且可以使用多种运算符(例如“==”、“>”、“<”等)来组合筛选条件。示例如下: df[df['column_name'] == value] df[(df['column_name'] > value) & (df['column_name_2'] < value_2)] 还可以使用.query()函数来筛选数据: df.query('column_name == value') df.query('column_name > value and column_name_2 < value_2') 还可以使用.loc[]或.iloc[]来进行筛选,它们根据标签或索引来筛选数据。 df.loc[df['column_name'] == value] df.iloc[:, 0:2] #筛选前2列 ### 回答2: 在数据分析的过程中,经常需要对数据进行筛选过滤,只保留相应的数据Pandas是Python中用于数据处理的强大工具,其中的DataFrame对象可以帮助我们轻松地实现各种数据筛选的操作。 一. 简单筛选 DataFrame中可以使用loc和iloc方法来进行筛选。loc根据index和column的标签进行选择,而iloc则根据index和column的位置进行选择。例如,下面从一个简单的DataFrame开始: ``` import pandas as pd data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Frank'], 'age': [25, 32, 18, 47, 23, 36], 'gender': ['F', 'M', 'M', 'M', 'F', 'M'], 'mark': [68, 85, 72, 78, 90, 91]} df = pd.DataFrame(data, columns=['name', 'age', 'gender', 'mark']) ``` 接下来对数据进行筛选,首先可以使用loc方法根据行标签和列标签进行数据筛选和输出: ``` df.loc[(df.gender == 'M') & (df.mark > 80), ['name', 'age']] ``` 这里我们选取了男性且分数大于80的同学的名字和年龄进行输出,得到的结果如下所示: ``` name age 1 Bob 32 5 Frank 36 ``` 此外,还可以使用iloc方法根据行和列的位置进行数据筛选和输出。例如,我们想选取第三列和第四行的数据,可以使用: ``` df.iloc[3, 2] ``` 这里的结果为78,即第三列第四行的数据。 二. 复杂筛选 对于更为复杂的筛选,可以使用query和apply方法进行读取和返回数据的操作。query方法可以处理一些较为复杂的逻辑条件,而apply方法则更加灵活,可以通过函数对数据进行处理。例如,下面添加一个state列,基于name确定所在州: ``` data_state = {'Alice': 'NY', 'Bob': 'CA', 'Charlie': 'TX', 'David': 'FL', 'Emily': 'CA', 'Frank': 'TX'} df['state'] = df['name'].map(data_state) ``` 接下来,我们使用query和apply方法对数据进行筛选处理。例如,我们选出年龄在20-30之间,并且分数大于等于70,所在州为NY或CA的学生: ``` df.query('(20 <= age <= 30) and (mark >= 70) and (state in ["NY", "CA"])') \ .apply(lambda x: f"{x['name']}, {x['age']}, {x['mark']}, {x['state']}", axis=1) ``` 这里使用了引号括起来的逻辑条件和列表,同时使用lambda函数处理输出格式。最终的输出结果如下所示: ``` 0 Alice, 25, 68, NY 1 Bob, 32, 85, CA dtype: object ``` 以上就是Pandas DataFrame数据进行筛选的一些基本操作。对于复杂的数据处理和筛选,我们可以使用query和apply方法灵活处理。Pandas的强大功能可以极大提高我们数据的处理效率,让数据分析变得更加轻松和高效。 ### 回答3: pandas是一款使用python编程语言的数据处理包,可用于数据的清洗、转换、合并、分析和可视化等任务。其中dataframepandas中最重要的数据结构之一,它类似于Excel中的电子表格,有行和列组成的表格数据。在处理数据时,经常需要对dataframe中的数据进行筛选,以便得到满足特定条件的数据子集。下面将介绍pandas dataframe筛选方法。 1. loc方法 loc方法主要用于通过标签索引数据,其语法格式如下: dataframe.loc[index, column] 其中,index和column可以采用以下方式进行选取: - 选取一行: dataframe.loc[index] - 选取一列:dataframe.loc[:, column] - 选取一行一列:dataframe.loc[index, column] 例如,以下代码将选取dataframe中index为2的行和column为A的列: dataframe.loc[2,'A'] 2. iloc方法 iloc方法主要用于通过位置索引数据,其语法格式如下: dataframe.iloc[row,column] 其中,row和column可以采用以下方式进行选取: - 选取一行:dataframe.iloc[row_index] - 选取一列:dataframe.iloc[:,column_index] - 选取一行一列:dataframe.iloc[row_index, column_index] 例如,以下代码将选取dataframe中第2行和第3列的数据dataframe.iloc[1,2] 3. query方法 query方法是pandas中比较方便的筛选数据方法,它的语法格式如下: dataframe.query(expression) 其中,expression是一个字符串,表示筛选条件。例如,以下代码将选取dataframe中'A'列的值等于1和3的行: dataframe.query('A == 1 or A == 3') 4. where方法 where方法可以根据条件对数据进行筛选,将不满足条件的数据替换成NaN,其语法格式如下: dataframe.where(condition, inplace=False) 其中,condition是一个布尔表达式,用于筛选数据。inplace参数用于指定是否在原dataframe上进行修改。例如,以下代码将选取dataframe中'A'列的值大于等于2的行: dataframe.where(dataframe['A'] >= 2) 总的来说,pandas dataframe筛选方法多种多样,可以根据具体需求选择不同的方法。熟悉和掌握这些筛选方法,对于数据处理和分析非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值