常用数据类型
-
Series 一维,带标签(索引)数组
t = pd.Series([random.randint(0, 10) for i in range(5)], index=list("abcde"))
a 10 b 0 c 3 d 9 e 7 dtype: int64
或通过字典创建Series
a = {"name": "小李", "age": 18, "tele": "187888"} t1 = pd.Series(a) print(t1)
name 小李 age 18 tele 187888 dtype: object
可以通过索引和位置来取数据。
print(t[1: 4]) print(t[[1, 3, 4]]) print(t[["a", "c"]]) print(t[t > 5]) print(t.index, t.values)
b 7 c 3 d 8 dtype: int64 b 7 d 8 e 2 dtype: int64 a 8 c 3 dtype: int64 a 8 b 7 d 8 dtype: int64 Index(['a', 'b', 'c', 'd', 'e'], dtype='object') [8 7 3 8 2]
-
DataFrame 二维,Series容器
t = pd.DataFrame(np.arange(12).reshape((3, 4)), index=list("abc"), columns=list("ABCD")) print(t) # 输出 A B C D a 0 1 2 3 b 4 5 6 7 c 8 9 10 11
或通过字典创建DataFrame
# 法1 a = {"name": ["小明", "小李"], "age": [18, 19], "tel": ["18721", "13999"]} t1 = pd.DataFrame(a) print(t1) # 法2 b = [{"name": "大明", "age": 18}, {"name": "大李", "age": 20}] t2 = pd.DataFrame(b) print(t2)
name age tel 0 小明 18 18721 1 小李 19 13999 name age 0 大明 18 1 大李 20
DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
DataFrame的基本属性:
- df.shape # 行数 列数
- df.dtypes # 列数据类型
- df.ndim # 数据维度
- df.index # 行索引
- df.columns # 列索引
- df.values # 对象值,二维ndarray数组
DataFrame整体情况查询:
- df.head(3) # 显示头部几行,默认5
- df.tail(3) # 显示末尾几行,默认5
- df.info() # 相关信息概览,行数、列数、列索引、列非空值个数、列类型、内存占用。
- df.describe() # 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值。
DataFrame排序:
# by: 根据哪一列进行排序 # ascending: 升序或降序 t.sort_values(by="B", ascending=False)
DataFrame切片索引:
-
方括号写数字表示取行:
t[:2]
-
方括号写字符串表示取列:
t["B"]
-
同时取行和列:
t[:2]["B"]
或
-
df.loc 通过标签索引行数据
t.loc["a", "B"] Out[34]: 1 t.loc["a"] Out[37]: A 0 B 1 C 2 D 3 Name: a, dtype: int32 t.loc["a",:] Out[36]: A 0 B 1 C 2 D 3 Name: a, dtype: int32 t.loc[:, "B"] Out[38]: a 1 b 5 c 9 Name: B, dtype: int32 t.loc[["a", "c"], ["A", "C"]] Out[39]: A C a 0 2 c 8 10
-
df.iloc 通过位置获取行数据
通过这种方法也可以进行赋值。
-
-
布尔索引:
t[(t["A"] > 3) & (t["B"] < 9)] Out[52]: A B C D b 4 5 6 7
读取外部数据
# pandas读取csv文件
df = pd.read_csv("./XXX.csv")
缺失数据处理
判断是否为nan:pd.isnull(t)
A B C D
a False False False False
b False True True False
c False True True False
判断是否不为nan:pd.notnull(t)
A B C D
a True True True True
b True False False True
c True False False True
删除包含nan所在的行或列
# axis=0表示删除有nan的行,axis=1表示删除有nan的列
# how="any"表示有一个nan就删,how="all"表示全部为nan就删
# inplace=False表示不进行原地修改,=True表示进行原地修改
t.dropna(axis=0, how="any")
填充nan所在的位置
t.fillna(t.mean())
# 或者只填充一列
t["B"].fillna(t["B"].mean())