一、使用csv模块进行读写

1、通过writer和reader对象进行写和读操作

  • 写操作

  通过创建writer对象写入:

    1. 创建数据和表头
    2. 创建writer对象
    3. 写表头
    4. 遍历列表,将每一行数据写入

  案例一(每次写入一行):

import csv

# 数据
person = [('xxx', 18, 193), ('yyy', 18, 182), ('zzz', 19, 185)]
# 表头
header = ['name', 'age', 'height']

with open('person.csv', 'w', encoding='utf-8', newline='') as file_obj:
    # 创建对象
    writer = csv.writer(file_obj)
    # 写表头
    writer.writerow(header)
    # 遍历,将每一行的数据写入csv
    for p in person:
        writer.writerow(p)

说明:newline='' 是为了防止换行写入

  案例二(一次性写入多行):

import csv

# 数据
person = [('xxx', 18, 193), ('yyy', 18, 182), ('zzz', 19, 185)]
# 表头
header = ['name', 'age', 'height']

with open('person.csv', 'w', encoding='utf-8', newline='') as file_obj:
    # 创建对象
    writer = csv.writer(file_obj)
    # 写表头
    writer.writerow(header)
    # 3.写入数据(一次性写入多行)
    writer.writerows(person)
  • 读操作

  通过reader对象读取

  案例:

import csv

with open('person.csv', 'r', encoding='utf-8') as file_obj:
    # 1.创建reader对象
    reader = csv.reader(file_obj)
    # 2.遍历进行读取数据
    for r in reader:
        print(r)

2、通过dictwriter和dictreader对象进行写和读操作

  • 写操作

  1. 创建数据和表头(数据必须是字典格式)
  2. 创建dictwriter对象
  3. 写表头
  4. 写入数据

  案例:

import csv

# 数据
person = [
    {'name': 'xxx', 'age': 18, 'height': 193},
    {'name': 'yyy', 'age': 18, 'height': 182},
    {'name': 'zzz', 'age': 19, 'height': 185},
]
# 表头
header = ['name', 'age', 'height']

with open('person.csv', 'w', encoding='utf-8', newline='') as file_obj:
    # 1.创建DicetWriter对象
    dictWriter = csv.DictWriter(file_obj, header)
    # 2.写表头
    dictWriter.writeheader()
    # 3.写入数据(一次性写入多行)
    dictWriter.writerows(person)
  • 读操作

  案例:

import csv

with open('person.csv', 'r', encoding='utf-8') as file_obj:
    # 1.创建reader对象
    dictReader = csv.DictReader(file_obj)
    # 2.遍历进行读取数据
    for r in dictReader:
        print(r)

二、使用pandas模块进行读写

读操作:

方式一:

import pandas as pd
# 按文件名读取整个文件
data = pd.read_csv("churn-bigml-80.csv") 
data.head()     # 展示前几行数据,通常为展示前5行

方式二:

# 按列标题读取每列数据
feature_name = ['State', 'Account length', 'Area code', 'International plan', 'Voice mail plan',
                        'Number vmail messages', 'Total day minutes', 'Total day calls', 'Total day charge',
                        'Total eve minutes', 'Total eve calls', 'Total eve charge', 'Total night minutes',
                        'Total night calls', 'Total night charge', 'Total intl minutes', 'Total intl calls',
                        'Total intl charge', 'Customer service calls']
target_name = ['Churn']
x_data = pd.read_csv("churn-bigml-80.csv", encoding='utf-8', usecols=feature_name)
y_data = pd.read_csv("churn-bigml-80.csv", encoding='utf-8', usecols=target_name)

print(x_data)

获取数据的基本属性:

1、data.head(r)、data.tail(r) 分别返回开头r行和末尾r行数据,若不传入数据r来指定返回行数,则默认为5行数据。

2、data.shape 返回数据尺寸

s = data.shape
print(s)

(2666, 20) 2666表示行数, 20表示列数

 3、data.dtypes 返回每个属性的数据类型

ty = data.dtypes
print(ty)

4、data.values 返回ndarray类型的对象

value = data.values
ty = type(value)
print(ty)
print(value)

5、data.nunique()返回每一列中是唯一值的个数

value = data.nunique()
num_list = data.nunique().tolist()
key_list = data.nunique().keys().tolist()

print('number of unique: \n', value)
print('\nkey list: \n', key_list)
print('\nonly value list: \n', num_list)


可以看出,单独代用dataframe的属性,返回的数据类型并不是list,因此可以通过加上.tolist()来将数据转化成list,便于后续操作。

6、data.index返回行索引

row_index = data.index
ty = type(row_index)
row_index_list = data.index.tolist()

print('rows index: \n', row_index)
print('\ntype: \n', ty)
print('\nlist: \n', row_index_list)

7、data.columns返回列索引

col_index = data.columns
ty = type(col_index)
col_index_list = data.columns.tolist()

print('rows index: \n', col_index)
print('\ntype: \n', ty)
print('\nlist: \n', col_index_list)

8、data.iloc[行序号,列序号]返回元素

x1 = data.iloc[0, 0]
print(x1)

9、data.loc[行索引,列索引]返回元素

x1 = data.loc[0, 'State']
print(x1)

写操作:

import pandas as pd
 
df = pd.DataFrame({
    "学院":["电子学院","机电学院","大数据学院","软件学院","网络学院"],
    "2017年":[1320,1351,2251,3178,2151],
    "2018年":[1323,1402,2202,3180,2190],
    "2019年":[1466,1322,2222,3162,2122],
    "2020年":[1486,1388,2248,3218,3108]
})
 
#index=False表示不写入索引
df.to_csv("学院.csv",index=False)

 

posted on 2022-06-01 14:19  司徒轩宇  阅读(274)  评论(0编辑  收藏  举报