Python之Pandas库(2)

本博客内容为唐宇迪老师的人工智能课程的笔记,仅为学习之用,请勿用于其他商业用途。

1、从pandas中取出数据

如果我们想从文件中取第一行数据,可以使用loc方法。要注意的是,loc后面跟着的不是小括号而是中括号,操作如下:

print(food_info.loc[0])

#结果如下:
NDB_No                         1001
Shrt_Desc          BUTTER WITH SALT
Water_(g)                     15.87
Energ_Kcal                      717
Protein_(g)                    0.85
Lipid_Tot_(g)                 81.11
Ash_(g)                        2.11
Carbohydrt_(g)                 0.06
Fiber_TD_(g)                      0
Sugar_Tot_(g)                  0.06
Calcium_(mg)                     24
Iron_(mg)                      0.02
Magnesium_(mg)                    2
Phosphorus_(mg)                  24
Potassium_(mg)                   24
Sodium_(mg)                     643
Zinc_(mg)                      0.09
Copper_(mg)                       0
Manganese_(mg)                    0
Selenium_(mcg)                    1
Vit_C_(mg)                        0
Thiamin_(mg)                  0.005
Riboflavin_(mg)               0.034
Niacin_(mg)                   0.042
Vit_B6_(mg)                   0.003
Vit_B12_(mcg)                  0.17
Vit_A_IU                       2499
Vit_A_RAE                       684
Vit_E_(mg)                     2.32
Vit_D_mcg                       1.5
Vit_D_IU                         60
Vit_K_(mcg)                       7
FA_Sat_(g)                   51.368
FA_Mono_(g)                  21.021
FA_Poly_(g)                   3.043
Cholestrl_(mg)                  215
Name: 0, dtype: object

嗯,这次python很实在地把所有数据都打印出来了……

2、通过切片的方法取出数据

print(food_info.loc[0:2])

#结果如下:
   NDB_No                 Shrt_Desc  ...  FA_Poly_(g)  Cholestrl_(mg)
0    1001          BUTTER WITH SALT  ...        3.043           215.0
1    1002  BUTTER WHIPPED WITH SALT  ...        3.012           219.0
2    1003      BUTTER OIL ANHYDROUS  ...        3.694           256.0

[3 rows x 36 columns]

需要注意的是,不同于python列表切片,pandas中使用loc切片,如果切片范围为[0:2],那么可以取出前三行。

3、通过列取数据

我们通过给NDB_No这一列赋值,来取这一列的数据:

ndb_col = food_info["NDB_No"]
print(ndb_col)

#结果
0        1001
1        1002
2        1003
3        1004
4        1005
        ...  
8613    83110
8614    90240
8615    90480
8616    90560
8617    93600
Name: NDB_No, Length: 8618, dtype: int64

如果定位2列,可以采用如下操作:

columns = ["Zinc_(mg)", "Copper_(mg)"]
zinc_copper = food_info[columns]
print(zinc_copper)

#结果
      Zinc_(mg)  Copper_(mg)
0          0.09        0.000
1          0.05        0.016
2          0.01        0.001
3          2.66        0.040
4          2.60        0.024
...         ...          ...
8613       1.10        0.100
8614       1.55        0.033
8615       0.19        0.020
8616       1.00        0.400
8617       1.00        0.250

[8618 rows x 2 columns]

这里需要注意的是,如果我们直接将 food_info["Zinc_(mg)", "Copper_(mg)"]赋值给zinc_copper,在打印的时候会报错!如果直接赋值,需要写成以下的格式:

zinc_copper = food_info[["Zinc_(mg)", "Copper_(mg)"]]
print(zinc_copper)

#结果
      Zinc_(mg)  Copper_(mg)
0          0.09        0.000
1          0.05        0.016
2          0.01        0.001
3          2.66        0.040
4          2.60        0.024
...         ...          ...
8613       1.10        0.100
8614       1.55        0.033
8615       0.19        0.020
8616       1.00        0.400
8617       1.00        0.250

[8618 rows x 2 columns]

3、数据的查找

我们可以发现,文件中有些指标以“g”为单位,有点则以“mg”为单位,如果我们希望查找哪些以g为单位,哪些以mg为单位,可以如下操作:

col_names = food_info.columns.tolist()
gram_columns = []

for c in col_names:
    if c.endswith("(g)"):
        gram_columns.append(c)
gram_df = food_info[gram_columns]
print(gram_df.head(3))

#结果
Water_(g)  Protein_(g)  Lipid_Tot_(g)  ...  FA_Sat_(g)  FA_Mono_(g)  FA_Poly_(g)
0      15.87         0.85          81.11  ...      51.368       21.021        3.043
1      15.87         0.85          81.11  ...      50.489       23.426        3.012
2       0.24         0.28          99.48  ...      61.924       28.732        3.694

[3 rows x 10 columns]

首先,通过tolist()方法返回所有列的列名(返回结果为一个列表),然后在列表中循环,使用endswith()方法,如果以“(g)”为结尾,则添加到gram_columns列表中。

4、在pandas中进行四则运算

如果我们想把Iron_(mg)这一列的单位变为g,则需要除以1000,可以采用如下操作:

print(food_info["Iron_(mg)"])
div_1000 = food_info["Iron_(mg)"]/1000
print(div_1000)

#结果
0       0.02
1       0.16
2       0.00
3       0.31
4       0.43
        ... 
8613    1.40
8614    0.58
8615    3.60
8616    3.50
8617    1.40
Name: Iron_(mg), Length: 8618, dtype: float64
0       0.00002
1       0.00016
2       0.00000
3       0.00031
4       0.00043
         ...   
8613    0.00140
8614    0.00058
8615    0.00360
8616    0.00350
8617    0.00140
Name: Iron_(mg), Length: 8618, dtype: float64

如果我们将pandas中两列数据进行相乘,则pandas会对两列对应位置的数据进行相乘。

5、在pandas中增加列

print(food_info.shape)
iron_grams = food_info["Iron_(mg)"] / 1000
food_info["Iron_(g)"] = iron_grams
print(food_info.shape)

#结果
(8618, 36)
(8618, 37)

可以看到,原文件共有36列,我们将Iron单位由mg变为g后又增加了一列,现在文件共37列。

注意pandas中增加列的方法。

发布了27 篇原创文章 · 获赞 9 · 访问量 995

猜你喜欢

转载自blog.csdn.net/sinat_42574069/article/details/102013061