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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章