2017-02-01 4 views
-2

Ich habe einen Datensatz in einem Pandas-Datenrahmen organisiert.Iterate über einen Pandas-Datenrahmen beim Überspringen der ersten Zeile

Hier ist ein kleines Beispiel für die Daten:

 x142_2012 x126_2012 x156_2012 x167_2012  x1_2012 x243_2012 
0  690.842629 0.005029 51.600000 5.454545 43.000000 27.700000 
1  4247.485437 5.062739 95.400000 54.655959 100.000000 15.700000 
2  5583.616160  NaN 84.900000 15.228027 100.000000 31.600000 
3    NaN  NaN 100.000000  NaN 59.328910  NaN 
4 39666.369210 34.335120 100.000000 86.434425 100.000000 50.000000 
5  5531.776299  NaN 47.800000 16.937210 37.000000 34.100000 
6 13525.616220 14.674017 97.900000 58.000000 90.875440 10.500000 
7  7465.145864 3.196932 85.417850 29.954302 86.270751 14.872018 
8 14357.411590 12.530952 98.600000 55.800000 99.800000 37.400000 
9  3565.517575 7.142042 99.700000 37.500000 100.000000 10.700000 
10   NaN  NaN 98.100000 74.000000 90.875440  NaN 

Ich möchte eine Reihe von Scatterplots bauen, der die variable x142_2012 miteinander Variable vergleichen, einzeln. Daher möchte ich über den Datenrahmen iterieren, während der erste Eintrag übersprungen wird. I versucht, dieses

import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 

for variable in subset[1:]: 
    plt.figure() 
    scatterplot = sns.regplot(x="x142_2012", y=variable, fit_reg=False, data=subset) 

sondern 5 Scatterplots des Ausgebens (x/y1, x/y2, x/y3, x/y4, x/y5), ist es Ausgang 6 mit dem ersten Streudiagramme x/x ist.

Ich erhalte, um das Problem mit diesem:

for variable in subset: 
    if variable == "x142_2012": 
     continue 
    plt.figure() 
    scatterplot = sns.regplot(x="x142_2012", y=variable, fit_reg=False, data=subset) 

Aber ich finde es nicht sehr elegant. Ich schaute auf Efficient way to do pandas operation and skip row und versuchte for variable in subset[x].idx[1:], aber es gibt mir AttributeError: 'Series' object has no attribute 'idx'.

Gibt es einen besseren Weg, dies zu tun?

+0

Ich habe Probleme zu verstehen, wie Ihr Datenrahmen aussieht. Könnten Sie einen Ausdruck eines Dataframes bereitstellen, der die beabsichtigte Struktur aufweist und klar angibt, wie sich dies auf 'x',' y1' usw. bezieht? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Ich arbeite mit einem Datensatz der Weltbank. Ich habe den Beitrag aktualisiert, um weitere Informationen hinzuzufügen. – Greg

Antwort

2

Statt subset[1:] verwendet subset.columns[1:]

1

subset[1:] wählt alle bis auf die erste Zeile aus, der resultierende DataFrame hat noch sechs Spalten.

Was können Sie stattdessen zu tun ist über den Datenrahmen Spalten zu wiederholen (und die erste auslassen):

import pandas as pd 
import numpy as np 
import seaborn as sns 
import matplotlib.pyplot as plt 

# generate some data 
a = np.random.rand(10,6) 
a[:,0]= np.arange(10) 
df = pd.DataFrame(a, columns=[l for l in "xabcde"]) 
#print df 

#plot 
for col in df.columns[1:]: 
    plt.figure() 
    scatterplot = sns.regplot(x="x", y=col, fit_reg=False, data=df) 

plt.show()