今天我們主要解決以下實際問題:一份黑名單數據存儲在excel中,由於數據量龐大,現需要通過pandas找到某一列的重複數據,處理後再存入到excel中。
pandas 是基於NumPy 的一種工具,該工具是爲了解決數據分析任務而創建的,主要數據結構爲兩個類:
DataFrame: 可以理解爲表格,類似於Excel的表格 pandas.core.frame.DataFrame
Series: 表示單列。DataFrame包含多個列,即多個Series,每個Series都有名稱。pandas.core.series.Series
Pandas所支持的數據類型(dtype):
1. float (float64)
2. int (int64,uint64)
3. bool
4. datetime64[ns] (2013-01-02)
5. datetime64[ns, tz]
6. timedelta[ns]
7. category
8. object (字符串)
默認的數據類型是int64,float64
以下是原始的excel文件
先查看文件中Series每一列的數據類型
import pandas as pd
# 更改數據類型
def change_data_type():
print(excel_df.dtypes)
if __name__ == '__main__':
excel_df = pd.read_excel('E:\zenglingwei\\test\\5.xlsx')
change_data_type()
我們發現blacklistValue默認是int類型,但我們知道身份證18位,再次存入excel中時後面幾位會變成0,所以我們需要對這列進行數據類型轉換。主要有兩種思路,一種是讀取excel時轉換,另外一種是讀取後轉換。
一、讀取時全部轉換爲字符串,dtype='object'或者dtype='str'
import pandas as pd
# 更改數據類型
def change_data_type():
print(excel_df.dtypes)
if __name__ == '__main__':
excel_df = pd.read_excel('E:\zenglingwei\\test\\5.xlsx',dtype='object') # dtype='str'
change_data_type()
二、讀取時指定列轉換爲字符串,object或者str
# 更改數據類型
def change_data_type():
print(excel_df.dtypes)
if __name__ == '__main__':
excel_df = pd.read_excel('E:\zenglingwei\\test\\5.xlsx',dtype = {'blacklistValue' : object,'priority':str}) # dtype='str'
change_data_type()
三、讀取後轉換爲字符串: astype(str),不可以使用astype(object)-->存入到excel時還是int類型。
import pandas as pd
# 更改數據類型
def change_data_type():
excel_df[['blacklistValue','priority']] = excel_df[['blacklistValue','priority']].astype(str)
print(excel_df.dtypes)
excel_df.to_excel('excel_to_python.xls',sheet_name='sheet', index=False)
if __name__ == '__main__':
excel_df = pd.read_excel('E:\zenglingwei\\test\\5.xlsx') # dtype='str'
change_data_type()