不管什么时候,读取txt文件,并生成一个完美的DataFrame数据结构,对我来说都是一项较为艰难的工作。
接下来我分享三种比较简单实用的方法,是我自己长期揣摩的方法:
我们拿一个txt文件看一下:
没有任何索引信息。
我们正常的读取如下:
path='./wuenda-data/ex1data1.txt'
data=pd.read_csv(path)
print(data)
F:\anaconda\envs\sklearn-env\python.exe F:/PycharmProject/demo.py
6.1101 17.592
0 5.5277 9.13020
1 8.5186 13.66200
2 7.0032 11.85400
3 5.8598 6.82330
4 8.3829 11.88600
.. ... ...
91 5.8707 7.20290
92 5.3054 1.98690
93 8.2934 0.14454
94 13.3940 9.05510
95 5.4369 0.61705
[96 rows x 2 columns]
Process finished with exit code 0
我们添加列名如下:
path='./wuenda-data/ex1data1.txt'
data=pd.read_csv(path,header=None,names=['X','y'])
print(data)
F:\anaconda\envs\sklearn-env\python.exe F:/PycharmProject/demo.py
X y
0 6.1101 17.59200
1 5.5277 9.13020
2 8.5186 13.66200
3 7.0032 11.85400
4 5.8598 6.82330
.. ... ...
92 5.8707 7.20290
93 5.3054 1.98690
94 8.2934 0.14454
95 13.3940 9.05510
96 5.4369 0.61705
[97 rows x 2 columns]
Process finished with exit code 0
这种方法比较简单,适合的数据集也比较干净。
我们看一个不同的数据集:
path='./wuenda-data/ex0.txt'
my_data=pd.read_csv(path)
print(my_data)
1.000000\t0.067732\t3.176513
0 1.000000\t0.427810\t3.816464
1 1.000000\t0.995731\t4.550095
2 1.000000\t0.738336\t4.256571
3 1.000000\t0.981083\t4.560815
4 1.000000\t0.526171\t3.929515
.. ...
194 1.000000\t0.257017\t3.585821
195 1.000000\t0.833735\t4.374394
196 1.000000\t0.070095\t3.213817
197 1.000000\t0.527070\t3.952681
198 1.000000\t0.116163\t3.129283
[199 rows x 1 columns]
很明显,上面的方法就不能再使用了,使用数据集的列与列之间用\t
来分割。
我们可以采用下面的方法:
path='./wuenda-data/ex0.txt'
fr=open(path,'r')
all_lines=fr.readlines()
dataset=[]
for line in all_lines:
line=line.strip().split('\t')
dataset.append(line)
print(dataset)
df=pd.DataFrame(dataset,columns=['X1','X2','y'])
print(df)
这样我们生成的数据集为:
X1 X2 y
0 1.000000 0.067732 3.176513
1 1.000000 0.427810 3.816464
2 1.000000 0.995731 4.550095
3 1.000000 0.738336 4.256571
4 1.000000 0.981083 4.560815
.. ... ... ...
195 1.000000 0.257017 3.585821
196 1.000000 0.833735 4.374394
197 1.000000 0.070095 3.213817
198 1.000000 0.527070 3.952681
199 1.000000 0.116163 3.129283
[200 rows x 3 columns]
这样的数据集是不是很好看了。
还拿第二个数据集来讲:
df2=pd.read_table(path,names=['x1','x2','y'])
print(df2)
x1 x2 y
0 1.0 0.067732 3.176513
1 1.0 0.427810 3.816464
2 1.0 0.995731 4.550095
3 1.0 0.738336 4.256571
4 1.0 0.981083 4.560815
.. ... ... ...
195 1.0 0.257017 3.585821
196 1.0 0.833735 4.374394
197 1.0 0.070095 3.213817
198 1.0 0.527070 3.952681
199 1.0 0.116163 3.129283
[200 rows x 3 columns]
是不是对比之下方便了很多!