# 3.3 数据框
# 特征:多个序列按照相同的索引组成的二维表
# 3.3.1 数据框的创建
import pandas as pd
import numpy as np # 先导入两个最常用的数据处理分析包
data = {"a" : [2,2,np.nan,5,6],"b" : ["kl","kl","kl",np.nan,"kl"],"c" : [4,6,5,np.nan,6],"d" : [7,9,np.nan,9,8]} #生成一个字典
df = pd.DataFrame(data)
print(df) #格式非常符合我们储存变量的形式
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 NaN kl 5.0 NaN
3 5.0 NaN NaN 9.0
4 6.0 kl 6.0 8.0
# 数据框属性
# 包括列变量的名称、索引和值
print("数据框中列的名称 columns = ") #对输出结果进行说明
print(df.columns) # column表示列变量名
print("-" * 40) # 用分隔线分隔各部分结果
print("数据框中索引 index = ")
print(df.index) #index 表示索引
print("-" * 40)
print("数据框中的值 = ")
print(df.values) # value表示取值
数据框中列的名称 columns =
Index(['a', 'b', 'c', 'd'], dtype='object')
----------------------------------------
数据框中索引 index =
RangeIndex(start=0, stop=5, step=1)
----------------------------------------
数据框中的值 =
[[2.0 'kl' 4.0 7.0]
[2.0 'kl' 6.0 9.0]
[nan 'kl' 5.0 nan]
[5.0 nan nan 9.0]
[6.0 'kl' 6.0 8.0]]
# 3.3.3 数据框方法
# 1.去掉空值 dropna()
df1 = df.dropna()
print(df) # 原始数据框不发生变化
print("*" * 40)
print(df1) # 去掉空值后的结果,注意这里去掉的是包含空值所在行的所有元素,相当于删除掉有空值的所有样本
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 NaN kl 5.0 NaN
3 5.0 NaN NaN 9.0
4 6.0 kl 6.0 8.0
****************************************
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
4 6.0 kl 6.0 8.0
# 2.填充空值 fillna()
df2 = df.fillna(0) # 所有空值元素用0填充,括号里面的表示要填充的元素
print(df2)
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 0.0 kl 5.0 0.0
3 5.0 0 0.0 9.0
4 6.0 kl 6.0 8.0
df3 = df.fillna("kl")
print(df3)
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 kl kl 5.0 kl
3 5.0 kl kl 9.0
4 6.0 kl 6.0 8.0
# 每一列空值填充的元素不一样
df4 = df.fillna({"a" : 0,"b" : "kl","c" : 0, "d": "lk"}) # 不同的列用列变量名表示,然后用字典的形式将每列空值要填充的元素补充到值上
print(df4)
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 0.0 kl 5.0 lk
3 5.0 kl 0.0 9.0
4 6.0 kl 6.0 8.0
# 一部分列需要填充
df5 = df.fillna({"a" : 8888, "b" : "kkkk"}) #按照上述形式将需要填充的列写入即可,没写的列不填充空值
print(df5)
a b c d
0 2.0 kl 4.0 7.0
1 2.0 kl 6.0 9.0
2 8888.0 kl 5.0 NaN
3 5.0 kkkk NaN 9.0
4 6.0 kl 6.0 8.0
# 3 .排序 sort_values()
data1 = {"a":[5,3,4,1,6],"b":["d","c","a","e","q"],"c":[4,6,5,5,6]}
Df = pd.DataFrame(data1)
print(Df)
a b c
0 5 d 4
1 3 c 6
2 4 a 5
3 1 e 5
4 6 q 6
Df1 = Df.sort_values("a",ascending = False) # 括号内第一个参数,填排序的变量名,第二个参数默认为升序,如果降序则需设置
print(Df1)
a b c
4 6 q 6
0 5 d 4
2 4 a 5
1 3 c 6
3 1 e 5
Df2 = Df.sort_values("b",ascending = False) #字母也可以按照顺序进行排序
print(Df2)
a b c
4 6 q 6
3 1 e 5
0 5 d 4
1 3 c 6
2 4 a 5
# 4.对索引进行排序 sort_index()
Df3 = Df1.sort_index(ascending = False) #索引是唯一的,不需要指定,括号里参数直接写排序模式即可
print(Df3)
a b c
4 6 q 6
3 1 e 5
2 4 a 5
1 3 c 6
0 5 d 4
# 5. 显示前几行 用head()
H4 = Df3.head(4) # 括号里表示要取的行数,取前4行
print(H4)
a b c
4 6 q 6
3 1 e 5
2 4 a 5
1 3 c 6
# 6. 删除数据框中指定的列 用drop()
H41 = H4.drop("b",axis = 1) #必须得指定轴为1
print(H41)
a c
4 6 6
3 1 5
2 4 5
1 3 6
# 水平连接两个数据框用join()
Df4 = pd.DataFrame({"e":[1,3,5,7,9]})
Df5 = df4.join(Df4)
print(Df5)
a b c d e
0 2.0 kl 4.0 7.0 1
1 2.0 kl 6.0 9.0 3
2 0.0 kl 5.0 lk 5
3 5.0 kl 0.0 9.0 7
4 6.0 kl 6.0 8.0 9
# 8.数据库转换为numpy数组 as_matrix()
list1 = ["a","b","c","d","e","f"]
list2 = [1,2,3,4,5,6]
list3 = [1.4,3.5,2,6,7,8]
list4 = [4,5,6,7,8,9]
list5 = ["t",5,6,7,"k",9.6]
D = {"m1":list1,"m2":list2,"m3":list3,"m4":list4,"m5":list5} #定义一个字典,将键和值匹配上
print(D)
{'m1': ['a', 'b', 'c', 'd', 'e', 'f'], 'm2': [1, 2, 3, 4, 5, 6], 'm3': [1.4, 3.5, 2, 6, 7, 8], 'm4': [4, 5, 6, 7, 8, 9], 'm5': ['t', 5, 6, 7, 'k', 9.6]}
D = pd.DataFrame(D)
print(D)
m1 m2 m3 m4 m5
0 a 1 1.4 4 t
1 b 2 3.5 5 5
2 c 3 2.0 6 6
3 d 4 6.0 7 7
4 e 5 7.0 8 k
5 f 6 8.0 9 9.6
D1 = D.as_matrix()
print(D1) # 新版本pandas不兼容此 *** 作
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in
----> 1 D1 = D.as_matrix()
2 print(D1) # 新版本pandas不兼容此 *** 作
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5463 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5464 return self[name]
-> 5465 return object.__getattribute__(self, name)
5466
5467 def __setattr__(self, name: str, value) -> None:
AttributeError: 'DataFrame' object has no attribute 'as_matrix'
D1 = D.iloc[:,:].values # D.as_matrix()新版本中采用iloc[:,:].values 或者 D.values也可以
print(D1)
[['a' 1 1.4 4 't']
['b' 2 3.5 5 5]
['c' 3 2.0 6 6]
['d' 4 6.0 7 7]
['e' 5 7.0 8 'k']
['f' 6 8.0 9 9.6]]
G = {"m1":list2,"m2":list3,"m3":list4}
G = pd.DataFrame(G)
print(G)
m1 m2 m3
0 1 1.4 4
1 2 3.5 5
2 3 2.0 6
3 4 6.0 7
4 5 7.0 8
5 6 8.0 9
G1 = G.iloc[:,:].values
print(G1)
[[1. 1.4 4. ]
[2. 3.5 5. ]
[3. 2. 6. ]
[4. 6. 7. ]
[5. 7. 8. ]
[6. 8. 9. ]]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)