2016-06-18 8 views
1

Ich habe zwei Datendateien a.csv und b.csv verwendet, die von Pastebin erhältlich: http://pastebin.com/nzjXESYn
http://pastebin.com/PDV5Ah64eine Möglichkeit, zwei Dateien mit dem gleichen „Spaltennamen“ zu verschmelzen und „verschiedene Reihen“ Pandas in Python

Erste Datei a.csv hat 4 Spalten und einige Kommentare:

# coating file for detector A/R 
# column 1 is the angle of incidence (degrees) 
# column 2 is the wavelength (microns) 
# column 3 is the transmission probability 
# column 4 is the reflection probability 
14.2 531.0 0.0618 0.9382 
14.2 532.0 0.07905 0.92095 
14.2 533.0 0.09989 0.90011 
14.2 534.0 0.12324 0.87676 
14.2 535.0 0.14674 0.85326 
14.2 536.0 0.16745 0.83255 
14.2 537.0 0.1837 0.8163 
# 
# 171 lines, 5 comments, 166 data 

Zweite Datei b.csv hat zwei Spalten mit einer gemeinsamen Spalte mit einer unterschiedlichen Anzahl von Zeilen:

# Version 2.0 - nm, [email protected] to 1, burrows+2006c91.21_T1350_g4.7_f100_solar 
# Wavelength(nm) Flambda(ergs/cm^s/s/nm) 
300.0 1.53345164121e-32 
300.1 1.53345164121e-32 
300.2 1.53345164121e-32 

# total lines = 20003, comment lines = 2, data lines = 20001 

Jetzt möchte ich diese beiden Dateien mit der zweiten Spalte gemeinsame (die Wellenlänge sollte in beiden Dateien identisch sein) zusammenführen.

Die Ausgabe sieht so aus:

# coating file for detector A/R 
# column 1 is the angle of incidence (degrees) 
# column 2 is the wavelength (microns) 
# column 3 is the transmission probability 
# column 4 is the reflection probability 
# Version 2.0 - nm, [email protected] to 1, burrows+2006c91.21_T1350_g4.7_f100_solar 
# Wavelength(nm) Flambda(ergs/cm^s/s/nm) 
14.2 531.0 0.0618 0.9382 1.14325276212 
14.2 532.0 0.07905 0.92095 1.14557732058 

Hinweis: Die Kommentare sind verschmolzen auch.
In der Datei b.csv ist die Wellenlänge in Zeilennummer = 2313.

Wie können wir dies in Python tun?

Mein erster Versuch ist dies:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# Author : Bhishan Poudel 
# Date  : Jun 17, 2016 


# Imports 
from __future__ import print_function 
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 


# read in dataframes 
#====================================================================== 
# read in a file 
# 
infile = 'a.csv' 
colnames = ['angle', 'wave','trans','refl'] 
print('{} {} {} {}'.format('\nreading file : ', infile, '','')) 
df1 = pd.read_csv(infile,sep='\s+', header = None,skiprows = 0, 
     comment='#',names=colnames,usecols=(0,1,2,3)) 

print('{} {} {} {}'.format('df.head \n', df1.head(),'','')) 
#------------------------------------------------------------------ 


#====================================================================== 
# read in a file 
# 
infile = 'b.csv' 
colnames = ['wave', 'flux'] 
print('{} {} {} {}'.format('\nreading file : ', infile, '','')) 
df2 = pd.read_csv(infile,sep='\s+', header = None,skiprows = 0, 
     comment='#',names=colnames,usecols=(0,1)) 
print('{} {} {} {}'.format('df.head \n', df2.head(),'','\n')) 
#---------------------------------------------------------------------- 


result = df1.append(df2, ignore_index=True) 
print(result.head()) 
print("\n") 

einige nützliche Links folgende:
How to merge data frame with same column names
http://pandas.pydata.org/pandas-docs/stable/merging.html

Antwort

2

Wenn Sie die beiden Datensätze zusammenführen möchten, sollten Sie .merge() Methode verwenden, anstatt .append().

result = pd.merge(df1,df2,on='wave') 

Erstere verbindet zwei Datenrahmen (ähnlich einer SQL verbinden), während die letztere die beiden Datenrahmen übereinander stapelt.

Verwandte Themen