pandas分析csv數據

參考文獻
[1] 十分鐘入門pandas

1.pandas基礎

  • 導入函數庫
import numpy as np
import pandas as pd

1.1 生成對象

1.1.1 生成Series
  • Series是帶標籤(索引)的數組,可存儲整數、浮點數、字符串、Python對象。
  • 生成函數:

s = pd.Series(data,index = index)

  • 默認index從0開始遞增
    data:字典,多維數組,標量
    1.1.1.1 使用list / 元組生成
s = pd.Series([1,2,3,4])
#或 s = pd.Series((1,2,3,4))
print(s)
out[]:
0    1
1    2
2    3
3    4
dtype: int64

1.1.1.2 索引
生成日期索引:

dates = pd.date_range('20130101',periods=6)

list循環

  • list 使用index進行循環
for index in range(len(list)):
	XXX 

傳遞list

def get_file_list(src1=None,src2=None)
	for i in range(len(src1)):
		path1 = src1[i]
		path2 = src2[i]
		with open(path1,'r') as f1, open(path2,'r') as f2:
			df1 = pd.read_csv(f1)
			df2 = pd.read_csv(f2)
			print(df1.info)
			print(df2.info)

DataFrame使用index循環

for i in df.index:
	print(df.iloc[i,'column_name'])

打印完成度

for k,i in enumerate(df.index):
	if k % 1000 == 0:
        print('運算進度: %s %% [%d/%d]'%(str(k / n),k+1,n),end='\r')

返回DataFrame的行數和列數

返回列數

df.shape[1]

返回列名

1.[column for column in df]
2.df.columns.values 返回 array
3.list(df)
4.df.columns 返回Index,可以通過 tolist(), 或者 list(array) 轉換爲list

返回行數

df.shape[0]

len(df)

指定刪除DataFrame中的某一行 / 多行

exmination_data=exmination_data.drop(index=exmination_data[exmination_data['CardNo'].isin(patient_CardNo_list)].index)
exmination_data=exmination_data.drop(exmination_data[exmination_data['CardNo'].isin(patient_CardNo_list)].index)

去重

  • 整行去重
df = df.drop_duplicates()
  • 由某一 / 幾 列去重
df = df.drop_duplicates('A')  # 單列
df = df.drop_duplicates(['A','B'])  #多列

指定列的值類型

d1[['p_date']] = d1[['p_date']].astype(float)

獲取列唯一值

df["A"].unique()

單獨獲取幾列數據

chunk = chunk[['CureNo','CardNo','RegTime','年齡']]

更改列名


pandas object類型

參考:
[1] pandas 的 object 類型
pandas Dataframe中str以object類型進行存儲,

  • dataframe中的 object 類型來自於 Numpy, 他描述了每一個元素 在 ndarray 中的類型 (也就是Object類型)。而每一個元素在 ndarray 中 必須用同樣大小的字節長度。 比如 int64 float64, 他們的長度都是固定的 8 字節。
  • str的長度不固定,因此pandas 儲存string時 使用 narray, 每一個object 是一個指針

1 pandas 處理大數據的技巧

1.1 分塊讀取

import pandas as pd

data_path = r'C:\Users\bucho\database\csvdata'
file_name = r'2019.csv'
csv_path = os.path.join(data_path,file_name)

def read_data(file_name):
    '''
    file_name:文件地址
    '''
    inputfile = open(file_name, 'rb')   #可打開含有中文的地址
    data = pd.read_csv(inputfile, iterator=True)
    loop = True
    chunkSize = 1000000    #一百萬行一塊
    chunks = []
    while loop:
        try:
            chunk = data.get_chunk(chunkSize)
            chunks.append(chunk)
        except StopIteration:
            loop = False
            print("Iteration is stopped.")
    data = pd.concat(chunks, ignore_index=True)
    #print(train.head())
    return data
df = read_data(csv_path)
import numpy as np 
import pandas as pd
import os
import sys

data_path = r'C:\Users\bucho\database\csvdata'
file_name = r'2019.csv'
csv_path = os.path.join(data_path,file_name)
inputfile = open(csv_path,'rb')
data = pd.read_csv(inputfile,iterator=True,chunksize=100000)

chunk = data.get_chunk()
chunk2 = data.get_chunk()
#每一次get_chunk()都會重新獲取新的數據
#chunk的範圍是0-9999
#chunk2的範圍是10000-19999

python 類型轉換

int 轉 str

a = 10
s = str(a)
# s = '10'

str 轉 int

s = '10'
a = int(s)
# a = 10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章