编码就是信息在不同处理系统间流转时的某种基准,也就是写成文本文件或二进制文件的规则。我们讨论的重点是“写成文本”,不去管流媒体之类,我们处理的数据就是通过文本形式实现序列化的。
import pandas as pd
df = pd.DataFrame({'ID':[7801,7802,7809],'姓名':['钱谦益','乔安','王诗安'],'score':[54,67,78]})
from datetime import datetime
df['生日'] = df['姓名'].map({'钱谦益':datetime(1994,3,13),'乔安':datetime(1995,4,3),'王诗安':datetime(1994,12,3)})
df
| ID | 姓名 | score | 生日 |
---|
0 | 7801 | 钱谦益 | 54 | 1994-03-13 |
---|
1 | 7802 | 乔安 | 67 | 1995-04-03 |
---|
2 | 7809 | 王诗安 | 78 | 1994-12-03 |
---|
我们观察一下这些值的类型,再写入文件,然后再读取
df.dtypes
ID int64
姓名 object
score int64
生日 datetime64[ns]
dtype: object
df.to_csv('coding_test.csv',encoding='gb2312',index=False)
!more coding_test.csv
ID,姓名,score,生日
7801,钱谦益,54,1994-03-13
7802,乔安,67,1995-04-03
7809,王诗安,78,1994-12-03
import csv
with open('coding_test.csv',mode='r',encoding='gb2312') as f:
reader = csv.reader(f)
for row in reader:
print(row)
['ID', '姓名', 'score', '生日']
['7801', '钱谦益', '54', '1994-03-13']
['7802', '乔安', '67', '1995-04-03']
['7809', '王诗安', '78', '1994-12-03']
我们看见了什么?读进来的都是文本,不太清楚,再看
rows = []
with open('coding_test.csv',mode='r',encoding='gb2312') as f:
reader = csv.reader(f)
for row in reader:
rows.append(row)
for r in rows:
for item in r:
print(item,'类型',type(item))
ID 类型 <class 'str'>
姓名 类型 <class 'str'>
score 类型 <class 'str'>
生日 类型 <class 'str'>
7801 类型 <class 'str'>
钱谦益 类型 <class 'str'>
54 类型 <class 'str'>
1994-03-13 类型 <class 'str'>
7802 类型 <class 'str'>
乔安 类型 <class 'str'>
67 类型 <class 'str'>
1995-04-03 类型 <class 'str'>
7809 类型 <class 'str'>
王诗安 类型 <class 'str'>
78 类型 <class 'str'>
1994-12-03 类型 <class 'str'>
现在我们来用pandas来读
df_in = pd.read_csv(r'coding_test.csv',encoding='gb2312')
df_in
| ID | 姓名 | score | 生日 |
---|
0 | 7801 | 钱谦益 | 54 | 1994-03-13 |
---|
1 | 7802 | 乔安 | 67 | 1995-04-03 |
---|
2 | 7809 | 王诗安 | 78 | 1994-12-03 |
---|
df_in.dtypes
ID int64
姓名 object
score int64
生日 object
dtype: object
我们跟当时写入的dataframe比较一下
df.dtypes
ID int64
姓名 object
score int64
生日 datetime64[ns]
dtype: object
有意思吧。这样我们就知道读写文件是就是读写文本,不带一点Python的烟火气