Pandas Dataframe 的学习笔记
- 0. Pandas 简介
- 1. 为什么要用 Pandas?
- 2. Series
- 3. DataFrame
- 3-1. 创建 DataFrame
- 3-2. 选择数据
- 3-3. 数据过滤
- 3-4. 修改 DataFrame
- 3-5. 数据清洗
- 3-6. 数据合并
- 3-7. info()
- 3-8. head()
- 3-9. tail()
- 3-10. fillna()
0. Pandas 简介
想象一下,你有一张超级大的餐桌,上面放满了各种各样的食物。Pandas 就像是这张餐桌,帮你整理和处理你所有的数据(食物)。Pandas 有两种特别的容器:Series(一行或一列食物)和 DataFrame(整张餐桌的食物)。
1. 为什么要用 Pandas?
- 整理数据:就像把食物按类型放在不同的盘子里一样,Pandas 帮你把数据整理得井井有条。
- 方便的数据操作:想吃哪个盘子里的食物,只需伸手拿过来。Pandas 让数据分析就这么简单。
- 强大的数据分析工具:就像有了厨师,不仅食物摆好了,还能做出你想要的任何味道。
2. Series
Series 就像是餐桌上的一列食物。它有一个主要的成分(数据)和一个标签列表(索引)。
import pandas as pd# 创建一个 Series
s = pd.Series([3, 6, 9, 12])
print(s)
这就像是你有一列食物,分别是三文鱼、六个寿司、九片烤肉和十二个饺子。
3. DataFrame
3-1. 创建 DataFrame
DataFrame 是整张餐桌,上面摆满了各种食物。它由多列 Series 组成,每列都有自己的名字。
import pandas as pd# 使用字典创建 DataFrame
data = {"Fruits": ["Apple", "Banana", "Cherry"],"Quantity": [5, 6, 7],"Price": [1.00, 0.50, 1.50]
}
df = pd.DataFrame(data)
print(df)
这就好比餐桌上有三种水果:苹果、香蕉和樱桃,每种水果都有对应的数量和价格。
3-2. 选择数据
选择数据就像是客人从自助餐桌上挑选他们想要的食物。
# 选择一列
print(df["Fruits"])# 选择多列
print(df[["Fruits", "Price"]])# 选择行
print(df.iloc[1]) # 选择第二行
这就像是客人决定只吃水果,然后又特别想知道每种水果的价格。
3-3. 数据过滤
过滤操作就像是在自助餐桌上找到所有价格大于0.8的选项,非常直接和简单。
# 过滤出所有价格大于0.8
print(df[df["Price"] > 0.8])
使用 query 方法过滤,
# 使用 query 方法过滤
print(df.query("Price > 0.8"))
使用 isin 方法进行过滤,
# 使用 isin 方法过滤
print(df[df["Fruits"].isin(["Apple", "Cherry"])])
3-4. 修改 DataFrame
有时候你可能需要更换餐桌上的某些食物,或者添加更多的美味佳肴。在Pandas中,修改DataFrame也很简单。
# 修改元素
df.at[0, "Quantity"] = 10 # 将苹果的数量改为10# 添加一列
df["Origin"] = ["USA", "Ecuador", "Turkey"]
print(df)# 添加一行
df = df.append({"Fruits": "Mango", "Quantity": 3, "Price": 1.75, "Origin": "India"}, ignore_index=True)
print(df)
这就好比你决定增加苹果的数量,同时在桌上新增了一种来自印度的芒果。
3-5. 数据清洗
在准备自助餐时,有时你会发现一些食物不够新鲜,需要被替换或删除。Pandas提供了多种方法来清洗DataFrame中的数据。
# 删除一行
df = df.drop(0) # 删除第一行# 删除一列
df = df.drop("Price", axis=1)
print(df)
这就像是你决定把不够新鲜的苹果从餐桌上拿走,同时也决定不再展示食物的价格。
3-6. 数据合并
如果你有两张自助餐桌,想把它们的食物合并到一张桌子上,Pandas的合并功能可以帮你做到。
# 创建另一个 DataFrame
data2 = {"Vegetables": ["Tomato", "Cucumber", "Pepper"],"Quantity": [8, 4, 5]
}
df2 = pd.DataFrame(data2)# 合并两个 DataFrame
df_merged = pd.concat([df, df2], axis=1)
# 或者
# df_merged = pd.merge(df, df2, left_index=True , right_index=True)
print(df_merged)
这就好比你决定将蔬菜也加入到自助餐桌上,让客人有更多的选择。
3-7. info()
info()
方法就像是给你一份菜单,上面列出了自助餐厅里所有的菜品(数据集中的列),每种菜品的主要成分(列的数据类型),以及是否有菜品没准备好(缺失值)。
# 使用 info() 查看 DataFrame 信息
df.info()
执行这段代码后,你会得到一个概览,告诉你有哪些列,每列的数据类型是什么,以及是否有缺失的数据。
3-8. head()
进入自助餐厅后,你可能会先尝一尝每种菜的前几口来决定是否喜欢。head()
方法正是做这个用的,它默认展示DataFrame中的前5行数据,当然,你也可以指定展示更多或更少的行。
# 使用 head() 查看前几行数据
print(df.head()) # 默认展示前5行# 查看前3行数据
print(df.head(3))
3-9. tail()
# 使用 tail() 查看最后几行数据
print(df.tail()) # 默认展示最后5行# 查看最后2行数据
print(df.tail(2))
这就相当于在离开餐厅前,你回头看了一眼那些你可能错过的美味,以便下次来的时候可以直接品尝。
3-10. fillna()
想象你在自助餐厅的餐盘里,某些菜品已经被别人取完了,留下了空位。你肯定不希望看到自己的餐盘有空缺,所以你可能会用其他的菜来填满这些空位。fillna()
方法就像是用来填满这些“空位”的工具,其中的“空位”指的是数据中的缺失值(NaN值)。
# 使用 fillna 填充缺失值
df_filled = df.fillna("Missing")
print(df_filled)
这就好比你把那些空缺的位置用“Missing”这个标签填满了,这样你的餐盘看起来就完整多了。
你可能想对不同的列使用不同的填充值,比如对于水果名称的缺失使用“Unknown Fruit”,对于价格的缺失使用平均值。
# 对 "Fruits" 列填充 "Unknown Fruit"
df["Fruits"].fillna("Unknown Fruit", inplace=True)# 对 "Price" 列填充平均值
df["Price"].fillna(df["Price"].mean(), inplace=True)
print(df)
这就像是对于没拿到的水果,你决定用“未知水果”这个标签,而对于没有标价的,你查看了一下其他水果的平均价格,然后用这个平均值来填充。
fillna()
还允许你使用不同的方法来填充缺失值,例如ffill
(前向填充)和bfill
(后向填充)。
# 前向填充
df_filled_ffill = df.fillna(method='ffill')# 后向填充
df_filled_bfill = df.fillna(method='bfill')print("前向填充结果:")
print(df_filled_ffill)
print("\n后向填充结果:")
print(df_filled_bfill)
前向填充就像是你用前一道菜来填充后一道空缺的菜位,而后向填充则是用后一道菜来填充前一道空缺的菜位。
完结!