专栏名称: 编程派
Python程序员都在看的公众号,跟着编程派一起学习Python,看最新国外教程和资源!
目录
相关文章推荐
Python爱好者社区  ·  碉堡了!用deepseek写了篇一区论文 ·  昨天  
Python开发者  ·  个人公积金交3998,单位交3998,加起来 ... ·  昨天  
Python爱好者社区  ·  刚刚,GPT-4.5震撼上线情商逆天!Ope ... ·  5 天前  
Python爱好者社区  ·  我???这就是信息差吗?F12改成绩,19. ... ·  2 天前  
Python中文社区  ·  34万亿“美债危机”黑天鹅要来了?用数据揭晓 ... ·  4 天前  
51好读  ›  专栏  ›  编程派

利用 Pandas 分析 IGN 游戏发行数据(下)

编程派  · 公众号  · Python  · 2017-03-02 11:37

正文

原文:https://www.dataquest.io/blog/pandas-python-tutorial/

作者:Vik Paruchuri

译者:linkcheng

Pandas Series(序列)对象

我们可以通过 Pandas 不同方法来检索一个单个列。到目前为止,我们已经两种类型的语法:

  • reviews . iloc [:, 1 ] - 检索第二列

  • reviews . loc [:, " core_phrase" ] - 同样也是第二列

还有第三种,甚至更容易的方式检索整个列。 我们可以在方括号中指定列名,就像字典一样:

  1. reviews["score"]

  1. 0         9.0

  2. 1         9.0

  3. 2         8.5

  4. 3         8.5

  5. 4         8.5

  6. 5         7.0

  7. ...

  8. 29        6.5

  9.         ...

  10. 18595     4.4

  11. 18596     6.5

  12. 18597     4.9

  13. 18598     6.8

  14. 18599     7.0

  15. 18600     7.4

  16. 18601     7.4

  17. 18602     7.4

  18. 18603     7.8

  19. 18604     8.6

  20. ...

  21. 18620     7.6

  22. 18621     9.0

  23. 18622     5.8

  24. 18623    10.0

  25. 18624    10.0

  26. Name: score, dtype: float64

我们依然可以使用列表的方式:

  1. reviews[["score", "release_year"]]

score release_year
0 9.0 2012
1 9.0 2012
2 8.5 2012
27 7.5 2012
28 8.0 2012
29 6.5 2012
... ... ...
18595 4.4 2016
18596 6.5 2016
18597 4.9 2016
18598 6.8 2016
18599 7.0 2016
18600 7.4 2016
18601 7.4 2016
18602 7.4 2016
18603 7.8 2016
18624 10.0 2016

18625 rows × 2 columns

当我们检索单个列时,我们实际上检索了一个 Pandas Series 对象。 DataFrame 存储表格数据,但是 Series 存储单个数据列或行。

我们可以验证单个列是否为系列:

  1. type(reviews["score"])

  1. pandas.core.series.Series

我们可以手动创建一个 Series,以更好地了解它是如何工作的。 创建一个 Series,当我们实例化它时,我们需要将一个 list 类型或 NumPy 数组传递给 Series 对象:

  1. s1 = pd.Series([1, 2])

  2. s1

  1. 0    1

  2. 1    2

  3. dtype: int64

Serise 可以包含任何类型的数据,包括混合类型。 在这里,我们创建一个包含字符串对象的 Serise:

  1. s2 = pd.Series(["Boris Yeltsin", "Mikhail Gorbachev"])

  2. s2

  1. 0        Boris Yeltsin

  2. 1    Mikhail Gorbachev

  3. dtype: object

通过 Pandas 创建 数据帧 DataFrame

我们可以通过将多个 Series 对象传递给 DataFrame 类来创建一个 DataFrame。 在这里,我们传入我们刚刚创建的两个 Series 对象, s1 作为第一行, s2 作为第二行:

  1. pd.DataFrame([s1, s2])


0 1
0 1 2
1 Boris Yeltsin Mikhail Gorbachev

我们也可以通过传递成员为列表的列表来完成同样的事情。 每个内部列表在结果 DataFrame 中被视为一行:

  1. pd.DataFrame(

  2.    [

  3.        [1,2],

  4.        ["Boris Yeltsin", "Mikhail Gorbachev"]

  5.    ]

  6. )


0 1
0 1 2
1 Boris Yeltsin Mikhail Gorbachev

我们可以在创建 DataFrame 时指定列标签:

  1. pd.DataFrame(

  2.    [

  3.        [1,2],

  4.        ["Boris Yeltsin", "Mikhail Gorbachev"]

  5.     ],

  6.    columns=["column1", "column2"]

  7. )


column1 column2
0 1 2
1 Boris Yeltsin Mikhail Gorbachev

同样可以指定行标签(即索引 index ):

  1. frame = pd.DataFrame(

  2.    [

  3.        [1, 2],

  4.        ["Boris Yeltsin", "Mikhail Gorbachev"]

  5.    ],

  6.    index=["row1", "row2"],

  7.    columns=["column1", "column2"]

  8. )

  9. frame


column1 column2
row1 1 2
row2 Boris Yeltsin Mikhail Gorbachev

然后,我们可以使用以下标签对DataFrame建立索引:

  1. frame.loc["row1":"row2", "column1"]

  1. row1                1

  2. row2    Boris Yeltsin

  3. Name: column1, dtype: object

如果我们将字典传递给 DataFrame 的构造函数,那么我们可以跳过指定 column 关键字参数。 这将会自动为列设置名称:

  1. frame = pd.DataFrame(

  2.     {

  3.        "column1": [1, 2],

  4.        "column2": ["Boris Yeltsin", "Mikhail Gorbachev"]

  5.    }

  6. )

  7. frame


column1 column2
0 1 Boris Yeltsin
1 2 Mikhail Gorbachev

Pandas DataFrame 方法

正如之前我们提到的,DataFrame 的每一个列都是一个 Series 对象

  1. type(reviews["title"])

  1. pandas.core.series.Series

那些对 DataFrame 适用的方法大多同样也适用于 Series 对象,包括 head

  1. reviews["title"].head()

  1. 0                              LittleBigPlanet PS Vita

  2. 1    LittleBigPlanet PS Vita -- Marvel Super Hero E...

  3. 2                                 Splice: Tree of Life

  4. 3                                               NHL 13

  5. 4                                               NHL 13

  6. Name: title, dtype: object

Pandas Series 和 DataFrames 中也有其他方法,使计算更简单。 例如,我们可以使用 pandas.Series.mean 方法来查找一个 Series 的平均值:

  1. reviews['score'].mean()

  1. 6.950459060402685

我们也可以调用类似的 pandas.DataFrame.mean 方法,它将在默认情况下找到 DataFrame 中每个数字列的平均值:

  1. reviews.mean()

  1. score               6.950459

  2. release_year     2006.515329

  3. release_month       7.138470

  4. release_day        15.603866

  5. dtype: float64

我们可以通过给 mean 方法添加 axis 关键字参数,用来计算每行或者每列的平均值。 axis 的缺省值为 0 ,并计算每一列的平均值。也可以设置为 1 来计算每一行的平均值。请注意,这只会计算每一行中类型为数值的平均值:

  1. reviews.mean(axis=1)

  1. 0        510.500

  2. 1        510.500

  3. 2        510.375

  4. 3        510.125

  5. 4        510.125

  6. 5        509.750

  7. 6        508.750

  8. 7        510.250

  9. 8        508.750

  10. 9        509.750


  11.          ...

  12. 18595    510.850

  13. 18596    510.875

  14. 18597    510.225

  15. 18598    510.700

  16. 18599    510.750

  17. 18600    512.600

  18. 18601    512.600

  19. 18602    512.600

  20. 18603    512.450

  21. 18604    512.400

  22. 18605    511.500

  23. 18606    508.600

  24. 18607    510.750

  25. 18608    510.350

  26. 18609    510.750

  27. 18610    510.250

  28. 18611    508.700

  29. 18612    509.200

  30. 18613    508.000

  31. 18614    515.050

  32. 18615    515.050

  33. 18616    508.375

  34. 18617    508.600

  35. 18618    515.025

  36. 18619    514.725

  37. 18620    514.650

  38. 18621    515.000

  39. 18622    513.950

  40. 18623    515.000

  41. 18624    515.000

  42. dtype: float64

在 Series 和 DataFrames 上有很多方法,它们的行为类似于 mean 。 这里有一些常见的:

我们可以使用 corr 方法来查看是否有任何列与 score 相关。 例如,通过这种方式我们可以得到,最近发布的游戏是否获得了更高的评价(release year),或者是否年底发布的游戏得分更好(release month):

  1. reviews.corr()

如上所述,我们的数字列都不与 score 相关,这意味着发布时间与审核分数没有线性关系。

Dataframe Math with Pandas

我们还可以对 Series 或 DataFrame 对象执行数学运算。 例如,我们可以将核心列中的每个值除以 2 ,将比例从 0 - 10 切换到 0 - 5

  1. reviews["score"] / 2

  1. 0        4.50

  2. 1        4.50

  3. 2        4.25

  4. 3        4.25

  5. 4        4.25

  6. 5        3.50

  7. 6        1.50

  8. 7        4.50

  9. 8        1.50

  10. 9        3.50

  11. 10       3.75

  12. 11       3.75

  13. 12       3.50

  14. 13       4.50

  15. 14       4.50

  16. 15       3.25

  17. 16       3.25

  18. ...

  19. 29       3.25

  20.         ...

  21. 18595    2.20

  22. 18596    3.25

  23. 18597    2.45

  24. 18598    3.40

  25. 18599    3.50

  26. 18600    3.70

  27. 18601    3.70

  28. 18602    3.70

  29. ...

  30. 18612    3.90

  31. 18613    4.00

  32. 18614    4.60

  33. 18615    4.60

  34. 18616    3.75

  35. 18617    4.20

  36. 18618    4.55

  37. 18619    3.95

  38. 18620    3.80

  39. 18621    4.50

  40. 18622    2.90

  41. 18623    5.00

  42. 18624    5.00

  43. Name: score, dtype: float64

在 Python 中所有常见数学运算符(如 + - * / ^ )对于 DataFrame 或 Series 都起作用,并且对其中的每个元素也都适用。

Boolean Indexing in Pandas

如上所述, reviews







请到「今天看啥」查看全文