使用Python的DataFrame處理丟失數據

import numpy as np
from pandas import DataFrame, Series
import pandas as pd

# 處理丟失數據  有兩種丟失數據:
''' 
1)None 是Python自帶的,其類型爲python object。因此,None不能參與到任何計算中
  object類型的運算要比int類型的運算慢的多,計算不同類型數據求和時間
2)np.nan(NaN) 是浮點類型,能參與到計算中。但計算的結果總是NaN。但可以使用np.nan*()函數來計算
  nan,此時視nan爲0。
'''
n1 = np.arange(0, 500, dtype=int).sum()   # arange()創建0-500的數據
print(n1)


# pandas中的None和NaN
'''1)pandas中None與np.nan都視爲np.nan'''
# 創建DataFrame
df = DataFrame({"age": [18, 16, 20, 22, 24], "salary": [10000, 26555, 20000, 15000, 23000]},
               index=["張三", "李四", "王五", "小趙", "小呂"],
               columns=["age", "salary", "work"])
print(df)

# 使用DataFrame行索引與列索引修改DataFrame數據
df.work["李四":"小趙"] = "Python"
print(df)


'''2)pandas中的None與np.nan的操作
----isnull()
----notnull()
----dropna():過濾丟失數據
----fillna():填充丟失數據
'''


# (1)判斷函數  isnull()   notnull()
# 根據獲得的數據去除原來數據的空數據
print(df.isnull())

s1 = df.isnull().any(axis=1)   # any只要有一個爲空,則返回True
# 有了s1數據,可以獲取哪些數據爲空
print(df[s1])

# 保留非空數據  notnull():判斷數據不爲空,限定所有的數據都不爲空,all()
s2 = df.notnull().all(axis=1)   # all表示一行數據全部爲True,才能返回True
print(df[s2])


# (2)過濾函數  dropna():過濾丟失數據  可以選擇過濾的是行還是列(默認是行)
print(df.dropna(axis=1))   # 直接過濾丟失數據
print(df.dropna(axis=0))

# 也可以選擇過濾的方式 how = 'all'
df.loc["張三"] = np.nan
df.loc["小呂"] = np.nan
print(df.dropna(how="all"))


# (3)填充函數Series/DataFrame    fillna()
# 對所有的空數據進行了替換
print(df.fillna(value="Java"))

# 可以選擇向前填充或者向後填充
print(df.fillna(method="ffill"))    # forward向前填充
print(df.fillna(method="backfill"))    # 向後填充
# inplace=True原來的數據就會發生變化
df.fillna(method="backfill", inplace=True)
print(df)

# 對於DataFrame來說,還要選擇填充的軸axis。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章