# 导入包
import pandas as pd
import numpy as np
import os
# 指定文件路径
fpath = r'C:\Users\Public'
fName = 'csv_memo1.csv'
csv_fullpath = os.path.join(fpath,fName)
# 构造DataFrame对象
# np.random.random()函数生成 5*5 的二维矩阵
# index指定行标签(每行第一个值), columns指定列标签(标题)
df = pd.DataFrame(np.random.random([5,5]), index=['a','b','c','d','e'], columns=['aa','bb','cc','dd','ee'])
# 把df写入到csv文件中
# sep 指定分割符, 默认为 ','
# header=False 表示不写入header
# index=False 表示不写入index
df.to_csv(csv_fullpath, sep=':', encoding='utf-8', header=False, index=False)
# 读取csv文件
# header=None: 不读取csv的title内容
# names=['aa', 'bb'] 指定新的title
# skiprows = [0] # 因为csv的第一行为标题行, 跳过的时候使用本命令
# index_col 指定索引列
# sep: 指定分割符, 可以使用正则表达式 "\*+"表示1到多次, "\**"表示0到多次
# nrows: 读取前几行
print("*" * 20, " 我是分割线", "*" * 20)
df1 = pd.read_csv(csv_fullpath, header=None, names=['a1','b1','c1','d1','e1'], index_col=['b1'], sep=':', nrows=3)
print(df1)
# chunksize=5: 把一个很大的文件分为多份, 每份5条, 多次读取
# 返回值为TextFileReader
print("*" * 20, " 我是分割线", "*" * 20)
df2 = pd.read_csv(csv_fullpath,chunksize=2, header=None, names=['a1','b1','c1','d1','e1'], sep=':')
for item in df2:
print('=' * 30)
print(item)
# NaN数据写入csv文件时, 一般为空,即没有值.
# 如果需要显示,使用关键字: na_rep指定
print("*" * 20, " 我是分割线", "*" * 20)
df3 = pd.DataFrame([[np.NaN,3,5],[5,7, np.NaN],[np.NaN, np.NaN, 8]])
outFile = os.path.join(fpath, 'NaN.csv')
df3.to_csv(outFile, na_rep='Hello')