pandas使用总结
参考文献
[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