要使用Pandas将文本文件读取为多列数据,你可以使用pandas.read_csv()
函数,并通过指定适当的分隔符来确保正确解析文件中的数据并将其分隔到多个列中。
假设你有一个以逗号分隔的文本文件(CSV格式),每一行包含多个值,你可以这样读取它:
1、问题背景
当使用Pandas读取文本文件时,可能会遇到整行被读为一列的情况,导致数据无法正确解析。
2、解决方案
有两种常见的解决方案:
- 使用正确的分隔符:确保使用的分隔符与文本文件中的数据分隔符一致。在示例中,分隔符应为r’\s+'(一个或多个空格)。
- 使用delim_whitespace=True:设置delim_whitespace参数为True,Pandas会自动检测分隔符,并根据空格将文本文件中的数据分隔为多列。
下面是使用正确分隔符的示例代码:
import pandas as pd
from StringIO import StringIO
a = '''
TRE-G3T- Triumph- 0.000 11/06/2013 313585.10 1765.00000 11/06/2013 313600.10 41 20 54.57907 -70 38 14.25924 -30.400 -1.379 893059.006 2588821.543 2834.294 -19545.615 -45.849 0.985 1.058 3.399 3.694 -15.203 1.099 1.0000 6 6.37 4 0.000 I -0.084 0.086 -0.059 0.000 0.000 0.000 363026.471 4578737.512 -30.400
TRE-G3T- Triumph- 0.000 11/06/2013 313585.20 1765.00000 11/06/2013 313600.20 41 20 54.61145 -70 38 14.22044 -30.332 -1.311 893061.933 2588824.850 2835.196 -19544.617 -45.779 0.944 1.015 3.313 3.592 -15.135 -3.365 1.4883 6 6.35 4 0.001 I 0.833 -0.485 -1.570 0.000 0.000 0.000 363027.391 4578738.493 -30.332
TRE-G3T- Triumph- 0.000 11/06/2013 313585.30 1765.00000 11/06/2013 313600.30 41 20 54.48685 -70 38 14.10862 -29.190 -0.169 893070.589 2588812.325 2837.797 -19548.465 -44.651 0.950 1.017 3.254 3.539 -13.994 -8.197 1.0000 6 5.70 4 0.001 I -0.158 0.003 0.061 0.000 0.000 0.000 363029.917 4578734.602 -29.190
'''
df = pd.read_csv(StringIO(a), delimiter=r'\s+', header=None)
print(df.shape)
print(df.head())
输出结果:
(3, 42)
0 1 2 3 4 5 6 7 \
0 TRE-G3T- Triumph- 0 11/06/2013 313585.1 1765 11/06/2013 313600.1
1 TRE-G3T- Triumph- 0 11/06/2013 313585.2 1765 11/06/2013 313600.2
2 TRE-G3T- Triumph- 0 11/06/2013 313585.3 1765 11/06/2013 313600.3
8 9 10 11 12 13 14 15 16 17 \
0 41 20 54.57907 -70 38 14.25924 -30.400 -1.379 893059.006 2588821.543
1 41 20 54.61145 -70 38 14.22044 -30.332 -1.311 893061.933 2588824.850
2 41 20 54.48685 -70 38 14.10862 -29.190 -0.169 893070.589 2588812.325
18 19
0 2834.294 -19545.615 ...
1 2835.196 -19544.617 ...
2 2837.797 -19548.465 ...
[3 rows x 42 columns]
下面是使用delim_whitespace=True的示例代码:
import pandas as pd
from StringIO import StringIO
a = '''
TRE-G3T- Triumph- 0.000 11/06/2013 313585.10 1765.00000 11/06/2013 313600.10 41 20 54.57907 -70 38 14.25924 -30.400 -1.379 893059.006 2588821.543 2834.294 -19545.615 -45.849 0.985 1.058 3.399 3.694 -15.203 1.099 1.0000 6 6.37 4 0.000 I -0.084 0.086 -0.059 0.000 0.000 0.000 363026.471 4578737.512 -30.400
TRE-G3T- Triumph- 0.000 11/06/2013 313585.20 1765.00000 11/06/2013 313600.20 41 20 54.61145 -70 38 1
所以说最终无论我们的文本文件使用何种分隔符,Pandas都提供了灵活的方式来读取它并将其解析为多列数据。今天的知识就介绍到这里,有啥问题可以截图留言讨论。