作者:小蜗牛爱学习 来源:https://blog.csdn.net/qq_42755939/article/details/107032142
一、Numpy读取文件
loadtxt()方法
numpy.loadtxt(fname, dtype=, comments=’#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
参数作用
fname被读取的文件名(文件的相对地址或者绝对地址)dtype指定读取后数据的数据类型comments跳过文件中指定开头的行(即不读取),比如comments=’#'表示不读取以#开头的数据delimiter指定读取文件中数据的分割符converters对读取的数据进行预处理skiprows选择跳过的行数usecols指定需要读取的列unpack选择是否将数据进行向量输出,相当于将源数据转置输出encoding对读取的文件进行预编码
import numpy
as np
GB_vido_path
= "GB_video_data_numbers.csv"
US_vido_path
= "US_video_data_numbers.csv"
t1
= np
.loadtxt
(GB_vido_path
,dtype
= "i8", delimiter
=",")
t2
= np
.loadtxt
(US_vido_path
,dtype
="i8", delimiter
=",")
print(t1
)
print("*"*100)
print(t2
)
二、数组转置的三种方法
方法一:使用属性T
方法二:使用方法transpose()
方法三:使用方法swapaxes()
arr01
= np
.arange
(2,8).reshape
(2,3)
print("arr01:",arr01
)
arr02
= arr01
.T
print("arr02:",arr02
)
arr03
= arr01
.transpose
()
print("arr03:",arr03
)
arr04
= arr01
.swapaxes
(1,0)
print("arr04:",arr04
)
三、Numpy的索引与切片
t
= np
.arange
(1,73).reshape
(8,9)
print(t
)
print("*"*100)
t0
= t
[2,3]
print("t0",t0
)
print(t
[[1,3],[5,6]])
t1
= t
[2]
print("t1:",t1
)
t2
= t
[2:5]
print("t2",t2
)
t3
= t
[[2,4,5]]
print("t3:",t3
)
t4
= t
[:,2]
print("t4:",t4
)
t5
= t
[:,2:5]
print("t5:",t5
)
t6
= t
[:,[1,3,7]]
print("t6:",t6
)
t7
= t
[2:4,4:6]
print("t7:",t7
)
四、修改numpy的值与bool索引
1、修改值
n1
= np
.arange
(1,64).reshape
(7,9)
n1
[:,2:5] = 0
print("n1:",n1
)
n2
= np
.arange
(1,64).reshape
(7,9)
n2
[n2
>40] =40
print("n2:",n2
)
n3
= np
.arange
(1,64).reshape
(7,9)
print(n3
>40)
2、Numpy中的三元运算
where()方法
r
= np
.arange
(54).reshape
(6,9)
print(np
.where
(r
>30,30,0))
3、numpy的clip()方法
arr
= np
.arange
(1,29).reshape
(4,7)
arr
= arr
.astype
("float64")
arr
[3:6,3:] = np
.nan
print("arr:",arr
)
arr1
= arr
.clip
(5,15)
print("arr1:",arr1
)
五、Numpy中的nan和inf
1、什么是nan?
nan(NAN,Nan):not a number 表示不是一个数字
2、numpy中会nan是如何产生的?
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan,当做了一个不合适的计算的时候(比如无穷大减去无穷大)
3、inf
inf(-inf,inf) : infinity, +inf表示正无穷,-inf表示负无穷
注意1:什么时候会出现inf包括(-inf,+inf)?
如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)
注意2:那么如何指定一个nan或者inf呢?
注意3:他们的type类型
a
= np
.nan
b
= np
.inf
print(type(a
),type(b
))
4、numpy中的nan的注意点
1、两个nan不相等
print("两个nan是否相等:",np
.nan
== np
.nan
)
print(np
.nan
!= np
.nan
)
2、判断一个数组里面有几个nan值
count_nonzero():判断数组里面0或者True的个数
arr1
= np
.array
([1., 2., 3., 4., np
.nan
, 5., np
.nan
])
print(arr1
)
print(arr1
!= arr1
)
print(np
.count_nonzero
(arr1
!= arr1
))
3、将nan值转化为0
np.isnan(arr)判断数组中nan值
arr2 = arr1
print(np.isnan(arr2)) #[False False False False True False True]
arr1[np.isnan(arr2)] = 0
print(arr2) #[1. 2. 3. 4. 0. 5. 0.]
4、nan与任何值计算都为nan
数据分析中nan值的处理
那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?
比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行
那如何计算一组数据的中值或者是均值?
六、Numpy中常用统计函数
1、求和:t.sum(axis=None) 2、均值:t.mean(a,axis=None) 受离群点的影响较大 3、中值:np.median(t,axis=None) 4、最大值:t.max(axis=None) 5、最小值:t.min(axis=None) 6、极值:np.ptp(t,axis=None) 即最大值和最小值只差 7、标准差:t.std(axis=None)
注意:默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果
七、数据清洗–Numpy如何处理缺失值填充均值
nan
= np
.nan
t
= np
.array
([
[ nan
, 1., nan
, 7., 4., 18.],
[ 9., 2., nan
, 9., 10., 11.],
[ nan
, 13., 14., nan
, 16., 88.],
[ 18., nan
, 51., 20., nan
, 63.]
])
def fill_nan_by_column_mean(t
):
"""将列的平均值替换nan"""
for i
in range(t
.shape
[1]):
nan_num
= np
.count_nonzero
(t
[:,1][t
[:,i
] != t
[:,i
]])
if nan_num
> 0:
now_col
= t
[:,i
]
now_col_num
= now_col
[t
[:,i
] == t
[:,i
]].sum()
avg
= round((now_col_num
/ (now_col
.shape
[0] - nan_num
)), 2)
now_col
[np
.isnan
(now_col
)] = avg
t
[:,i
] = now_col
return t
t
= fill_nan_by_column_mean
(t
)
print(t
)
[
[13.5 1. 32.5 7. 4. 18. ]
[ 9. 2. 32.5 9. 10. 11. ]
[13.5 13. 14. 12. 16. 88. ]
[18. 5.33 51. 20. 10. 63. ]
]
推荐阅读:
我精心整理的 136 页 Excel 数据透视表 PDF 文件!【附获取方式】100天从 Python 小白到大神的学习资源,都在这了。不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏…我花了五个小时的时间,将全部文章详细整理出来了,千万不要错过!
关注微信公众号『杰哥的IT之旅』,后台回复“1024”查看更多内容,回复“微信”添加我微信。
Jack Tian
认证博客专家
Linux
运维
GitHub
杰哥,博客专家、首页内容推荐官、互联网IT领域个人公众号、分享Linux运维、Python、开源项目、开发工具、编程技术、行业前沿资讯等相关内容干货!(关注后回复“1024”查看更多精选优质内容)