2016-02-04 3 views
1

У меня есть две текстовые файлы ... Структура Первый:панды создать dataframe из двух файлов

:Data_list: 20160203_Gs_xr_1m.txt 
:Created: 2016 Feb 04 0010 UTC 
# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center 
# Please send comments and suggestions to [email protected] 
# 
# Label: Short = 0.05- 0.4 nanometer 
# Label: Long = 0.1 - 0.8 nanometer 
# Units: Short = Watts per meter squared 
# Units: Long = Watts per meter squared 
# Source: GOES-13 
# Location: W075 
# Missing data: -1.00e+05 
# 
#   1-minute GOES-13 Solar X-ray Flux 
# 
#     Modified Seconds 
# UTC Date Time Julian of the 
# YR MO DA HHMM Day  Day  Short  Long 
#------------------------------------------------------- 
2016 02 03 0000 57421  0  2.13e-09 4.60e-07 
2016 02 03 0001 57421  60  1.84e-09 4.51e-07 
2016 02 03 0002 57421 120  1.79e-09 4.52e-07 
2016 02 03 0003 57421 180  1.58e-09 4.58e-07 
2016 02 03 0004 57421 240  2.51e-09 4.56e-07 
2016 02 03 0005 57421 300  4.30e-09 4.48e-07 
2016 02 03 0006 57421 360  1.97e-09 4.47e-07 
2016 02 03 0007 57421 420  2.46e-09 4.47e-07 
2016 02 03 0008 57421 480  3.10e-09 4.51e-07 
2016 02 03 0009 57421 540  3.24e-09 4.43e-07 
2016 02 03 0010 57421 600  2.92e-09 4.34e-07 
2016 02 03 0011 57421 660  2.42e-09 4.35e-07 
2016 02 03 0012 57421 720  2.90e-09 4.40e-07 
2016 02 03 0013 57421 780  1.87e-09 4.36e-07 
2016 02 03 0014 57421 840  1.31e-09 4.37e-07 
2016 02 03 0015 57421 900  2.50e-09 4.41e-07 
2016 02 03 0016 57421 960  1.52e-09 4.42e-07 
2016 02 03 0017 57421 1020  1.36e-09 4.41e-07 
2016 02 03 0018 57421 1080  1.33e-09 4.35e-07 
2016 02 03 0019 57421 1140  2.20e-09 4.37e-07 
2016 02 03 0020 57421 1200  2.90e-09 4.53e-07 
2016 02 03 0021 57421 1260  1.39e-09 4.75e-07 
2016 02 03 0022 57421 1320  4.55e-09 4.67e-07 
2016 02 03 0023 57421 1380  2.30e-09 4.58e-07 
2016 02 03 0024 57421 1440  3.99e-09 4.53e-07 
2016 02 03 0025 57421 1500  3.93e-09 4.40e-07 
2016 02 03 0026 57421 1560  1.70e-09 4.34e-07 
. 
. 
. 
2016 02 03 2344 57421 85440  3.77e-09 5.00e-07 
2016 02 03 2345 57421 85500  3.76e-09 4.96e-07 
2016 02 03 2346 57421 85560  1.64e-09 4.97e-07 
2016 02 03 2347 57421 85620  3.59e-09 5.04e-07 
2016 02 03 2348 57421 85680  2.55e-09 5.04e-07 
2016 02 03 2349 57421 85740  2.30e-09 5.11e-07 
2016 02 03 2350 57421 85800  2.95e-09 5.09e-07 
2016 02 03 2351 57421 85860  4.25e-09 5.02e-07 
2016 02 03 2352 57421 85920  4.78e-09 5.02e-07 
2016 02 03 2353 57421 85980  3.04e-09 5.01e-07 
2016 02 03 2354 57421 86040  3.30e-09 5.10e-07 
2016 02 03 2355 57421 86100  2.22e-09 5.16e-07 
2016 02 03 2356 57421 86160  4.12e-09 5.15e-07 
2016 02 03 2357 57421 86220  4.25e-09 5.16e-07 
2016 02 03 2358 57421 86280  3.48e-09 5.20e-07 
2016 02 03 2359 57421 86340  4.19e-09 5.27e-07 

И второй один:

:Data_list: 20160204_Gs_xr_1m.txt 
:Created: 2016 Feb 04 1301 UTC 
# Prepared by the U.S. Dept. of Commerce, NOAA, Space Weather Prediction Center 
# Please send comments and suggestions to [email protected] 
# 
# Label: Short = 0.05- 0.4 nanometer 
# Label: Long = 0.1 - 0.8 nanometer 
# Units: Short = Watts per meter squared 
# Units: Long = Watts per meter squared 
# Source: GOES-13 
# Location: W075 
# Missing data: -1.00e+05 
# 
#   1-minute GOES-13 Solar X-ray Flux 
# 
#     Modified Seconds 
# UTC Date Time Julian of the 
# YR MO DA HHMM Day  Day  Short  Long 
#------------------------------------------------------- 
2016 02 04 0000 57422  0  4.85e-09 5.28e-07 
2016 02 04 0001 57422  60  3.07e-09 5.29e-07 
2016 02 04 0002 57422 120  4.48e-09 5.26e-07 
2016 02 04 0003 57422 180  3.21e-09 5.17e-07 
2016 02 04 0004 57422 240  4.23e-09 5.18e-07 
2016 02 04 0005 57422 300  4.55e-09 5.21e-07 
2016 02 04 0006 57422 360  3.30e-09 5.31e-07 
2016 02 04 0007 57422 420  5.29e-09 5.49e-07 
2016 02 04 0008 57422 480  3.14e-09 5.65e-07 
2016 02 04 0009 57422 540  6.59e-09 5.70e-07 
2016 02 04 0010 57422 600  6.04e-09 5.62e-07 
2016 02 04 0011 57422 660  5.31e-09 5.62e-07 
2016 02 04 0012 57422 720  6.04e-09 5.46e-07 
2016 02 04 0013 57422 780  6.81e-09 5.51e-07 
2016 02 04 0014 57422 840  6.59e-09 5.65e-07 
2016 02 04 0015 57422 900  5.81e-09 5.62e-07 
2016 02 04 0016 57422 960  4.63e-09 5.59e-07 
2016 02 04 0017 57422 1020  3.05e-09 5.51e-07 
2016 02 04 0018 57422 1080  3.26e-09 5.46e-07 
2016 02 04 0019 57422 1140  4.59e-09 5.50e-07 
2016 02 04 0020 57422 1200  3.38e-09 5.39e-07 
2016 02 04 0021 57422 1260  2.43e-09 5.37e-07 
2016 02 04 0022 57422 1320  5.31e-09 5.60e-07 
2016 02 04 0023 57422 1380  5.63e-09 5.51e-07 
2016 02 04 0024 57422 1440  5.18e-09 5.50e-07 
2016 02 04 0025 57422 1500  7.06e-09 5.59e-07 
2016 02 04 0026 57422 1560  5.01e-09 5.76e-07 
2016 02 04 0027 57422 1620  7.17e-09 5.63e-07 
2016 02 04 0028 57422 1680  5.74e-09 5.58e-07 
2016 02 04 0029 57422 1740  5.55e-09 5.62e-07 
2016 02 04 0030 57422 1800  4.99e-09 5.47e-07 
2016 02 04 0031 57422 1860  5.49e-09 5.42e-07 
2016 02 04 0032 57422 1920  2.14e-09 5.32e-07 
2016 02 04 0033 57422 1980  2.48e-09 5.21e-07 
2016 02 04 0034 57422 2040  4.35e-09 5.18e-07 
2016 02 04 0035 57422 2100  4.84e-09 5.13e-07 
2016 02 04 0036 57422 2160  3.12e-09 5.05e-07 
2016 02 04 0037 57422 2220  1.18e-09 4.99e-07 
2016 02 04 0038 57422 2280  1.59e-09 4.95e-07 

Теперь мне нужно создать панды dataframe имя и три колонки ... В первый раз это будет YYYY MM DD HHMM, второй xra-предпоследний столбец и столбец xrb-last ... и мне нужно найти max of xrb со временем ... Я думаю, что я знаю, как найти max с индексом с pandas, но я не знаю, как создать pandas dataframe ... У меня проблема с «заголовком» до 19-й строки ... Мне нужно создать dataframe из двух файлов с помощью ut header - только данные. И есть ли какой-либо метод, как читать данные с некоторого времени до некоторого времени (временной диапазон)? Спасибо за помощь

редактировать: У меня есть этот скрипт:

import urllib2 
import sys 
import datetime 
import pandas as pd 


xray_flux = urllib2.urlopen('ftp://ftp.swpc.noaa.gov/pub/lists/xray/'+date+'_Gp_xr_1m.txt') 
flux=xray_flux.read() 
dataflux= open('xray_flux.txt','w') 
dataflux.write(flux) 
dataflux.close() 

a=pd.read_csv("xray_flux.txt",header=None, sep=" ",error_bad_lines=False,skiprows=19) 


print a 
df=pd.DataFrame(a) 

print df 
+0

Заголовок файлов имеет одинаковое количество строк? – jezrael

+0

Да, к строке 19 –

+0

, если это всего лишь 2 файла, не быстрее ли просто удалить заголовки вручную? в противном случае вы можете сделать это в коде, просмотрев файл по строкам и удалив все строки, начинающиеся с «:» или «#». это самое простое решение, которое приходит на ум, конечно, не общее, но я сомневаюсь, что есть элегантное общее решение, и если вам это не нужно, не тратьте время на его поиск. –

ответ

1

Вы можете попробовать read_csv и concat:

dateparse = lambda x: pd.datetime.strptime(x, '%Y %m %d %H%M') 

#df1 = pd.read_csv('ftp://ftp.swpc.noaa.gov/pub/lists/xray/'+date+'_Gp_xr_1m.txt', 
#after testing replace io.StringIO(temp) to filename 
df1 = pd.read_csv(io.StringIO(temp1), 
       sep="\s+", 
       index_col=None, 
       skiprows=19, 
       parse_dates={'datetime': [0,1,2,3]}, 
       header=None, 
       date_parser=dateparse) 
print df1.head() 
      datetime  4 5    6    7 
0 2016-02-03 00:00:00 57421 0 2.130000e-09 4.600000e-07 
1 2016-02-03 00:01:00 57421 60 1.840000e-09 4.510000e-07 
2 2016-02-03 00:02:00 57421 120 1.790000e-09 4.520000e-07 
3 2016-02-03 00:03:00 57421 180 1.580000e-09 4.580000e-07 
4 2016-02-03 00:04:00 57421 240 2.510000e-09 4.560000e-07 

#df = pd.read_csv('ftp://ftp.swpc.noaa.gov/pub/lists/xray/'+date+'_Gp_xr_1m.txt', 
#after testing replace io.StringIO(temp) to filename 
df2 = pd.read_csv(io.StringIO(temp), 
       sep="\s+", 
       index_col=None, 
       skiprows=19, 
       parse_dates={'datetime': [0,1,2,3]}, 
       header=None, 
       date_parser=dateparse) 
print df2.head() 
      datetime  4 5    6    7 
0 2016-02-04 00:00:00 57422 0 4.850000e-09 5.280000e-07 
1 2016-02-04 00:01:00 57422 60 3.070000e-09 5.290000e-07 
2 2016-02-04 00:02:00 57422 120 4.480000e-09 5.260000e-07 
3 2016-02-04 00:03:00 57422 180 3.210000e-09 5.170000e-07 
4 2016-02-04 00:04:00 57422 240 4.230000e-09 5.180000e-07 
df = pd.concat([df1[['datetime',6,7]],df2[['datetime',6,7]]]) 
df.columns = ['datetime','xra','xrb'] 
print df.head(10) 
      datetime   xra   xrb 
0 2016-02-03 00:00:00 2.130000e-09 4.600000e-07 
1 2016-02-03 00:01:00 1.840000e-09 4.510000e-07 
2 2016-02-03 00:02:00 1.790000e-09 4.520000e-07 
3 2016-02-03 00:03:00 1.580000e-09 4.580000e-07 
4 2016-02-03 00:04:00 2.510000e-09 4.560000e-07 
5 2016-02-03 00:05:00 4.300000e-09 4.480000e-07 
6 2016-02-03 00:06:00 1.970000e-09 4.470000e-07 
7 2016-02-03 00:07:00 2.460000e-09 4.470000e-07 
8 2016-02-03 00:08:00 3.100000e-09 4.510000e-07 
9 2016-02-03 00:09:00 3.240000e-09 4.430000e-07 

EDIT:

Также вы можете использовать параметр usecols в read_csv для фильтрации столбцов - вам нужны только столбцы datetime, 6 и 7. Затем вы можете использовать все df1 и df2 в pd.concat:

#df1 = pd.read_csv('ftp://ftp.swpc.noaa.gov/pub/lists/xray/'+date+'_Gp_xr_1m.txt', 
df1 = pd.read_csv(io.StringIO(temp1), 
       sep="\s+", 
       index_col=None, 
       skiprows=19, 
       parse_dates={'datetime': [0,1,2,3]}, 
       header=None, 
       date_parser=dateparse, 
       usecols=[0, 1, 2, 3, 6, 7]) 
print df1.head() 
      datetime    6    7 
0 2016-02-03 00:00:00 2.130000e-09 4.600000e-07 
1 2016-02-03 00:01:00 1.840000e-09 4.510000e-07 
2 2016-02-03 00:02:00 1.790000e-09 4.520000e-07 
3 2016-02-03 00:03:00 1.580000e-09 4.580000e-07 

#df2 = pd.read_csv('ftp://ftp.swpc.noaa.gov/pub/lists/xray/'+date+'_Gp_xr_1m.txt', 
df2 = pd.read_csv(io.StringIO(temp), 
       sep="\s+", 
       index_col=None, 
       skiprows=19, 
       parse_dates={'datetime': [0,1,2,3]}, 
       header=None, 
       date_parser=dateparse, 
       usecols=[0, 1, 2, 3, 6, 7]) 
print df2.head() 
      datetime    6    7 
0 2016-02-04 00:00:00 4.850000e-09 5.280000e-07 
1 2016-02-04 00:01:00 3.070000e-09 5.290000e-07 
2 2016-02-04 00:02:00 4.480000e-09 5.260000e-07 
3 2016-02-04 00:03:00 3.210000e-09 5.170000e-07 
4 2016-02-04 00:04:00 4.230000e-09 5.180000e-07 
df = pd.concat([df1,df2]) 
df.columns = ['datetime','xra','xrb'] 
print df 
       datetime   xra   xrb 
0 2016-02-03 00:00:00 2.130000e-09 4.600000e-07 
1 2016-02-03 00:01:00 1.840000e-09 4.510000e-07 
2 2016-02-03 00:02:00 1.790000e-09 4.520000e-07 
3 2016-02-03 00:03:00 1.580000e-09 4.580000e-07 
4 2016-02-03 00:04:00 2.510000e-09 4.560000e-07 
5 2016-02-03 00:05:00 4.300000e-09 4.480000e-07 
6 2016-02-03 00:06:00 1.970000e-09 4.470000e-07 
7 2016-02-03 00:07:00 2.460000e-09 4.470000e-07 
8 2016-02-03 00:08:00 3.100000e-09 4.510000e-07 
9 2016-02-03 00:09:00 3.240000e-09 4.430000e-07 
+0

Какие столбцы вам нужны? '4,5,6,7'? – jezrael

+0

Мне нужны столбцы 6,7 –

+0

Есть ли какой-то метод, как создать dataframe из двух файлов? –

Смежные вопросы