pandas
类别数据
IO
看过来
《pandas 教程》 持续更新中,可作为 pandas 入门进阶课程、pandas 中文手册、用法大全,配有案例讲解和速查手册。提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。查看更新日志。作者开办 Python 数据分析培训,详情 Python 数据分析培训。
![]() |
本教程作者所著新书《Python之光:Python编程入门与实战》(ISBN:9787111729891)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
![]() |
本教程作者所著新书《深入浅出Pandas:利用Python进行数据处理与分析》(ISBN:9787111685456)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
您可以将包含类别 dtypes 的数据写入HDFStore, 也可以将数据写入Stata格式文件或从中读取数据。
写入CSV文件将转换数据,有效删除有关分类(分类和排序)的任何信息。 因此,如果您读回 CSV 文件,则必须将相关列转换回类别,并分配正确的类别和类别顺序。
import io
s = pd.Series(pd.Categorical(['a', 'b', 'b', 'a', 'a', 'd']))
# rename the categories
s.cat.categories = ["very good", "good", "bad"]
# reorder the categories and add missing categories
s = s.cat.set_categories(["very bad", "bad", "medium", "good", "very good"])
df = pd.DataFrame({"cats": s, "vals": [1, 2, 3, 4, 5, 6]})
csv = io.StringIO()
df.to_csv(csv)
df2 = pd.read_csv(io.StringIO(csv.getvalue()))
df2.dtypes
'''
Unnamed: 0 int64
cats object
vals int64
dtype: object
'''
df2["cats"]
'''
0 very good
1 good
2 good
3 very good
4 very good
5 bad
Name: cats, dtype: object
'''
# Redo the category
df2["cats"] = df2["cats"].astype("category")
df2["cats"].cat.set_categories(["very bad", "bad",
"medium", "good", "very good"],
inplace=True)
df2.dtypes
'''
Unnamed: 0 int64
cats category
vals int64
dtype: object
'''
df2["cats"]
'''
0 very good
1 good
2 good
3 very good
4 very good
5 bad
Name: cats, dtype: category
Categories (5, object): [very bad, bad, medium, good, very good]
'''
使用 to_sql 写入SQL数据库也是如此。
Pandas 主要使用值np.nan表示丢失的数据。 默认情况下,它不包括在计算中。
缺失值只能在值中,不能在类别中。可以理解的是,NaN 是不同的,并且总是可能的,使用分类代码时,缺失值将始终为-1。
s = pd.Series(["a", "b", np.nan, "a"], dtype="category")
# only two categories
s
'''
0 a
1 b
2 NaN
3 a
dtype: category
Categories (2, object): [a, b]
'''
s.cat.codes
'''
0 0
1 1
2 -1
3 0
dtype: int8
'''
处理缺失数据的方法,例如 isna(), fillna(), dropna() 都可以正常工作:
s = pd.Series(["a", "b", np.nan], dtype="category")
s
'''
0 a
1 b
2 NaN
dtype: category
Categories (2, object): [a, b]
'''
pd.isna(s)
'''
0 False
1 False
2 True
dtype: bool
'''
s.fillna("a")
'''
0 a
1 b
2 a
dtype: category
Categories (2, object): [a, b]
'''