常用模式 | 含义 |
r | 只读 |
r+ | 读写 |
rb | 二进制 读 |
rb+ | 二进制 读写 |
w | 只写 |
w+ | 读写 |
wb | 二进制 写 |
wb+ | 二进制 读写 |
a | 追加 |
a+ | 读写 |
ab | 二进制 读 |
ab+ | 二进制 读写 |
注意:1. 使用“w”模式。文件若存在,会覆盖原文件;文件若不存在,会创建新文件。
2. 使用“a”模式。默认把要写入的数据追加到文件末尾;如果文件不存在,将自动创建。
eg1. with open 方法
import csv
with open('test.csv','w') as csvFile:
writer = csv.writer(csvFile)
#先写columns_name
writer.writerow(["index","a_name","b_name"])
#写入多行用writerows
writer.writerows([[1,2,3],[0,1,2],[4,5,6]])
#用reder读取csv文件
with open('test.csv','w') as csvFile:
reader = csv.reader(csvFile)
for line in reader: # 通过迭代器访问文件
print(line)
eg2. open 方法
import csv
# 创建/打开一个csv文件
f = open('小说.csv', 'w', encoding='utf-8-sig', newline='')
# 基于文件对象构建csv写入对象
csv_write = csv.writer(f)
# 构建csv列表头
csv_write.writerow(["title", "score", "evaluator", "href"])
for i in csv_write:
print(i)
f1.close()
注意:使用open 方式时,调用write()
来写入文件,但是务必要调用f.close()
来关闭文件。因为写入文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。因此,只有调用close()
方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()
可能导致数据只写了一部分到磁盘,剩下的丢失了,还会占用操作系统的资源。而使用with
语句来写入时会自动调用close()
方法。
import pandas as pd
data = pd.read_csv(r'', header=0) # 读取文件
data['ReferenceNum'] = pd.DataFrame(data=NumReference) # 存入CSV表单
data['ForeignNum'] = pd.DataFrame(data=ForeignNum)
data.to_csv('', encoding='utf-8-sig', index=False)
####### 行合并 #######
f1 = pd.read_csv('file1.csv')
f2 = pd.read_csv('file2.csv')
file = [f1,f2]
train = pd.concat(file)
train.to_csv("file3" + ".csv", index=0, sep=',')
####### 列合并 #######
f1 = pd.read_csv('file1.csv')
f2 = pd.read_csv('file2.csv')
file = [f1,f2]
train = pd.concat(file,axis=1) # 设置axis=1即可实现
train.to_csv("file3" + ".csv", index=0, sep=',')
import pandas as pd
import glob
import os
csv_list = glob.glob('*.csv') #查看同文件夹下的csv文件数
print(u'共发现%s个CSV文件'% len(csv_list))
#循环读取同文件夹下的csv文件
for i in csv_list:
fr = open(i,'rb').read()
with open('result.csv','ab') as f: #将结果保存为result.csv
f.write(fr)
print('合并完毕!')
首先引入模块pandas库,读取csv文件,再根据需求进行下一步操作。
import pandas as pd
df = pd.read_csv("result.csv",header=0)
数据预处理:检测缺失值
# 检查列是否有缺失值,false无缺失值||true有缺失值;对于行any(axis=1)
print(df.isnull().any())
# 统计缺失值的数量;对于某一列:print(df.age.isnull().sum())
# print(df.isnull().sum())
# 替换缺失值:用NA替换数据中的X
m, n = df.shape #数据维度;i,j根据数据定义
for i in range(0, m):
for j in n:
if df.loc[i, j] == 'X':
df.loc[i, j] = 'NaN'
3.2.1 dropna()方法:过滤任何含有缺失值的行
df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
参数 | 含义 |
axis | axis=0 : 删除包含缺失值的行 axis=1 : 删除包含缺失值的列 |
how | 与axis配合使用 how=‘any’ :只要有缺失值出现,就删除该行或列 how=‘all’ :所有的值都缺失,才删除行或列 |
thresh | axis中至少有thresh个非缺失值,否则删除 eg. axis=0,thresh=10:标识如果该行中非缺失值的数量小于10,将删除该行 |
subset | list,在哪些列中查看是否存在缺失值 eg. subset=['list'] |
inplace | 是否在原数据上操作 True:返回None; False:返回新的copy,去掉了缺失值 |
3.2.2 drop_duplicates函数的使用:去除重复的内容
df.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index= False)
参数 | 含义 |
subset | 用来指定特定的列,默认为None subset=None:所有标签都相同才认为是重复项 |
keep | {‘first’, ‘last’, False},默认 ‘first’ ‘first’:保留该标签第一次出现时的样本,之后重复出现的全部丢弃。 |
inplace | Boolean,默认为False False:返回去除重复项后的DataFrame,原来的DataFrame不改变。 |
ignore_index | Boolean,默认为False False:丢弃重复值之后的DataFrame的index不改变 |
3.2.3 fillna()方法:填充缺失值
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)
参数 | 含义 |
value | scalar, dict, Series, or DataFrame dict 可以指定每一行或列用什么值填充 |
method | {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认为 None(在列上操作) ffill / pad: 使用前一个值来填充缺失值 backfill / bfill :使用后一个值来填充缺失值 None:指定一个值去替换缺失值(缺省默认这种方式) |
axis | 修改填充方向,默认纵向 如要修改方向变为横向填充(行)设置 axis=1 |
inplace | Boolean,默认为False True:直接修改原对象 False:创建一个副本,修改副本,原对象不变(缺省默认) |
limit | 填充的缺失值个数限制 |
4.1 object str、float等所需类型
# 将dataframe某一列数据类型为object的转换为数字类型float
df["val"] = pd.to_numeric(df["val"],errors='coerce')
df = df.convert_objects(convert_numeric=True)
traindata=pd.DataFrame(traindata,dtype=np.float)
DataFrame.info()
# object —— str
df['val'] = df['val'].astype(str)
4.2 object datetime日期类型
pandas.to_datetime(arg,format=None,unit=None)
参数 | 含义 |
arg | 需要转换类型的数据list |
format | 所输入数据的时间格式 月 日 年 时 分 秒 :'%m/%d/%Y %H:%M:%S' 星期 月 日 时 分 秒 年:"%a %b %d %H:%M:%S %Y" |
unit | 最小时间间隔,如’D’代表一天 |
反之,datetime object:map函数中的strftime()
df_object=df_time.map(lambda x:x.strftime('%Y/%m/%d'))
参考文献: