DataFrame基本操作
使用pandas读取CSV
import pandas as pd
df = pd.read_csv('food_info.csv')
df.head(5)
df 即 pandas 的 DataFrame 对象,在Jupyter中的运行结果如下:
DataFrame的常用操作
查看DataFrame的shape:
获取表中所有数值类型的常用统计指标:
DataFrame的列索引
还可以获取将列索引转化为 list
列索引对象可迭代:遍历列索引对象,获取所有以 g 为单位的食材
gram_food = []
for c in df.columns:
if c.endswith("(g)"):
gram_food.append(c)
df[gram_food].head()
运行结果:
DataFrame列的运算
将 Protein_(g) 列的所有值乘以2:
将 Lipid_Tot_(g) 列的所有值乘以0.75:
向DataFrame中添加一个新的列 initial_rating :
df["initial_rating"] = (df["Protein_(g)"] * 2) + (df["Lipid_Tot_(g)"] * 0.75)
df.loc[:2][["Protein_(g)", "Lipid_Tot_(g)", "initial_rating"]]
运行结果:
看看新增加列对的最大值:
DataFrame关于行的操作
使用切片操作,选取特定的行:
使用 df[start: stop: step] 而不是 df.loc[start: stop: step] 时,将不包含stop行:
推荐在选取指定行时,使用 loc 的形式。如果是使用列表选取指定行时,必须添加loc,否则会报错:
DataFrame排序操作
依据某一列的值进行排序:
# inplace=True对DataFrame就地修改,而不是返回一个新的DataFrame
df.sort_values("initial_rating", inplace=True)
df[["Protein_(g)", "Lipid_Tot_(g)", "initial_rating"]].tail(3)
上述示例为升序排列,下面我们指定为降序:
df.sort_values("initial_rating", inplace=True, ascending=False)
df[["Protein_(g)", "Lipid_Tot_(g)", "initial_rating"]].head(3)
inplace参数的默认值为 False ,即返回一个已排序的新的DataFrame,原DataFrame不会发生改变。使用sort_index()可以根据索引重新排序 DataFrame,同理,也可以指定 inplace 参数,表示是否就地修改:
方法总结
DataFrame的操作
方法 | 说明 |
---|---|
df = pandas.read_csv(‘csv文件’) | 读取CSV文件为Pandas的DataFrame对象 |
df.head(n) | 返回DataFrame的头n行数据 |
df.columns | 返回列名组成的Index对象 |
df.shape | 返回DataFrame的形状(row * colus) |
df.describe() | 以DataFrame的形式返回各数值列的统计信息 |
DataFrame行的操作
方法 | 说明 |
---|---|
df.loc[n] | 第n+1行记录以Series形式返回 |
df.loc[start: stop: step] | 使用切片选取DataFrame的部分记录,包含stop |
df[start: stop: step] | 使用切片选取DataFrame的部分记录,不包含stop |
df.loc[[num1, num2, num3]] | 使用列表选取DataFrame的部分记录 |
DataFrame列的操作
方法 | 说明 |
---|---|
df[‘列名’] | 获取DataFrame的某一列,类型为Series |
df[‘列名’].name | 获取当前列的列名 |
df[‘列名’].dtype | 获取当前列的数据类型 |
df[[‘列名1’,‘列名2’,…]] | 使用列表的形式选取指定的列 |
df.columns.tolist() | 将列名以列表形式返回 |
df[‘新列名’] = Series对象 | 在DataFrame中增加一列 |
df[‘列名’].max() | 求该列的最大值 |
指定列为依据进行排序
方法 | 说明 |
---|---|
df**.sort_values(**by, axis=0, ascending=True, inplace=False) | 返回一个排序后的DataFrame,默认为升序 |
df.sort_values(by, axis=0, ascending=False, inplace=True) | 就地降序排列,原DataFrame的顺序将被改变 |