Я пытаюсь прочитать файл csv, разделенный пробелами. Пробелы в столбцах неравномерны, и в одном столбце STN_NAME есть символы, разделенные пробелами. Формат данных приведен ниже:

STN CODE      LAT        LON     Un_1      STN_NAME                     S_YR E_YR  Un_2
ACM00078861  17.1170  -61.7830   10.0    COOLIDGE FIELD (UA)            1947 1993  13896
AEM00041217  24.4333   54.6500   16.0    ABU DHABI INTERNATIONAL AIRPOR 1983 2018  36109
AEXUAE05467  25.2500   55.3700    4.0    SHARJAH                        1935 1942   2477
AFM00040911  36.7000   67.2000  378.0    MAZAR-I-SHARIF                 2010 2014   2179
AFM00040913  36.6667   68.9167  433.0    KUNDUZ                         2010 2013   4540

Я использовал pd.read_fwf для чтения файла csv. Файл содержит 2788 строк, но pd.read_fwf читает только первые 30 и последние 30 строк файла.

import os
import csv
import pandas as pd

with open('radiosonde_stations.csv') as csvfile:
    
    data = pd.read_fwf(csvfile, infer_nrows=2790)
    query = data[(data['LAT'] >= -18) & (data['LAT'] <= 45) & (data['LON'] >= 48) & (data['LON'] <= 117)]
    print(data)
    print(query)
    file = 'southeast_asia_stnlist.csv'
    with open(os.path.join('/home/DATA/RADIOSONDE/', file), 'a') as output:
        writer = csv.writer(output)
        writer.writerow([query])

Вывод выглядит следующим образом (печатаются только первые 30 и последние 30 строк)

25    AGM00060571  31.5000   -2.2500   811.0                          BECHAR   
26    AGM00060580  31.9333    5.4000   152.0                         OUARGLA   
27    AGM00060590  30.5670    2.8670   397.0                        EL-GOLEA   
28    AGM00060602  30.1330   -2.1670   505.0                      BENI-ABBES   
29    AGM00060607  29.2500    0.2830   312.0                        TIMIMOUN   
          ...      ...       ...     ...                             ...   
2758  ZZV00ASEU02 -98.8888 -998.8888  -998.8                          ASEU02   
2759  ZZV00ASEU03 -98.8888 -998.8888  -998.8                          ASEU03   
2760  ZZV00ASEU04 -98.8888 -998.8888  -998.8                          ASEU04   

Я хочу применить условия к столбцам lat & lon и записать результат в другой файл. Но при записи в другой csv-файл он пишет так, как показано выше. (первые 30 строк, затем ----, затем последние 30 строк). Как я могу записать все данные полностью в файл csv.

Спасибо!

Ajay

Ответов: 1

Ответы (1)

Для записи в csv можно использовать прямую функцию .to_csv() библиотеки pandas.

import os
import csv
import pandas as pd

with open('radiosonde_stations.csv') as csvfile:
    
    data = pd.read_fwf(csvfile, infer_nrows=2790)
    query = data[(data['LAT'] >= -18) & (data['LAT'] <= 45) & (data['LON'] >= 48) & (data['LON'] <= 117)]
    print(data)
    print(query)
    file = 'southeast_asia_stnlist.csv'
    query.to_csv(file)

Это может облегчить вашу задачу.

Спасибо.

2022 WebDevInsider