#python #pandas #csv
#python #pandas #csv
Вопрос:
У меня есть файлы данных, которые выглядят следующим образом:
1 97289.7040474555 4115155.1896845801 0.00 !CBBT
2 110001.7354024933 4137233.7577695986 0.00 !Kipp
3 74939.1481210588 4112567.6513698865 0.00 !Sewell
4 79229.7242711330 4187153.1872533290 0.00
5 61695.8917768109 4228702.2687039487 0.00 !Lew
6 60107.3402798224 4339752.4155515051 0.00
7 50000.7890042169 4371192.7593760351 0.00
8 83629.3190899160 4365284.1160797141 0.00 !Tolchester
9 102439.5140892575 4294944.9082385190 0.00 !Cam
10 57967.0160118927 4146324.9518534313 0.00
11 134578.0549105595 4027953.9016875746 0.00 !Duck
12 98480.8626 4069397.4626 0.0000 ! 030102051108 Tull Bay-Northwest River
13 79345.3319 4069313.0018 0.0000 ! 030102051102 Culpeper Island-Dismal Swamp
14 93152.7452 4069628.5738 0.0000 ! 030102051104 Indian Creek-Northwest River
15 105488.9967 4070521.3806 0.0000 ! 030102051206 Milldam Creek-North Landing River
...
Я хотел бы прочитать это в фрейме данных Pandas с первыми четырьмя столбцами в виде чисел, а затем остальную часть строки в виде строки, содержащей полный комментарий или примечание, в 5-й столбец. Я не могу рассчитывать на наличие интервала или !
символов.
Если я попытаюсь
import pandas as pd
df = pd.read_csv('foo.txt',sep='s ',
dtype={'id': np.int32, 'x': np.float64, 'y': np.float64, 'note': str},)
Я получаю только первую маркерную ценность комментария, разделенную пробелом, в note
столбец.
Я бы хотел что-то вроде limit
функциональности функции perl split REGEX, STRING, LIMIT
.
Ответ №1:
Сначала прочитайте файл в один столбец с некоторым разделителем, которого нет в файле, |
а затем выполните следующие действия Series.str.split
, назначив новые столбцы и DataFrame.astype
:
df = pd.read_csv('foo.txt', sep="|", header=None)
print (df)
d = {'id': np.int32, 'x': np.float64, 'y': np.float64,'z':np.float64, 'note': str}
df = df[0].str.split(n=4, expand=True)
df.columns = list(d.keys())
df = df.astype(d)
print (df)
id x y z
0 1 97289.704047 4.115155e 06 0.0
1 2 110001.735402 4.137234e 06 0.0
2 3 74939.148121 4.112568e 06 0.0
3 4 79229.724271 4.187153e 06 0.0
4 5 61695.891777 4.228702e 06 0.0
5 6 60107.340280 4.339752e 06 0.0
6 7 50000.789004 4.371193e 06 0.0
7 8 83629.319090 4.365284e 06 0.0
8 9 102439.514089 4.294945e 06 0.0
9 10 57967.016012 4.146325e 06 0.0
10 11 134578.054911 4.027954e 06 0.0
11 12 98480.862600 4.069397e 06 0.0
12 13 79345.331900 4.069313e 06 0.0
13 14 93152.745200 4.069629e 06 0.0
14 15 105488.996700 4.070521e 06 0.0
note
0 !CBBT
1 !Kipp
2 !Sewell
3 nan
4 !Lew
5 nan
6 nan
7 !Tolchester
8 !Cam
9 nan
10 !Duck
11 ! 030102051108 Tull Bay-Northwest River
12 ! 030102051102 Culpeper Island-Dismal...
13 ! 030102051104 Indian Creek-Northwest...
14 ! 030102051206 Milldam Creek-North La...
Комментарии:
1. Спасибо. Я начал дважды импортировать его и вставлять обратно, но это гораздо более чистый метод.