2016-05-16 5 views
0

Ich versuche nur eine Spalte aus den langen und großen Datensätzen zu säubern. Die Daten haben 18 Spalten, mehr als 10k + Zeilen ungefähr 100s von csv-Dateien, von denen ich nur eine Spalte säubern möchte.Eine Spalte von langen und großen Datensätzen bereinigen

Eingabefelder nur wenige aus der langen Liste

userLocation, userTimezone, Coordinates, 
India,   Hawaii, {u'type': u'Point', u'coordinates': [73.8567, 18.5203]} 
California,  USA  
      ,  New Delhi, 
Ft. Sam Houston,Mountain Time (US & Canada),{u'type': u'Point', u'coordinates': [86.99643, 23.68088]} 
Kathmandu,Nepal, Kathmandu, {u'type': u'Point', u'coordinates': [85.3248024, 27.69765658]} 

Volleingabedatei: Dropbox link

Code:

import pandas as pd 

    data = pandas.read_cvs('input.csv') 

    df = ['tweetID', 'tweetText', 'tweetRetweetCt', 'tweetFavoriteCt',  
      'tweetSource', 'tweetCreated', 'userID', 'userScreen', 
      'userName', 'userCreateDt', 'userDesc', 'userFollowerCt', 
      'userFriendsCt', 'userLocation', 'userTimezone', 'Coordinates', 
      'GeoEnabled', 'Language'] 

    df0 = ['Coordinates'] 

Andere Spalten geschrieben, wie es in der Ausgabe ist. Wie geht man danach?

Ausgang:

userLocation, userTimezone, Coordinate_one, Coordinate_one, 
India,   Hawaii,   73.8567, 18.5203 
California,  USA  
      ,  New Delhi, 
Ft. Sam Houston,Mountain Time (US & Canada),86.99643, 23.68088 
Kathmandu,Nepal, Kathmandu, 85.3248024, 27.69765658 

Der mögliche einfachste Vorschlag oder lenkt mich zu einem gewissen Beispiel wird viel hilfreich sein.

Antwort

1

Hier sind viele Dinge falsch.

  1. Die Datei ist keine einfache CSV und wird nicht ordnungsgemäß von Ihrem angenommenen data = pd.read_csv('input.csv') analysiert.
  2. Die eingereichten ‚Koordinaten‘ scheint eine json String
  3. Es gibt Nans im selben Feld

Dies ist, was ich bisher getan zu sein. Sie wollen etwas Arbeit auf eigene Parsing diese Datei besser geeignet

import pandas as pd 

df1 = pd.read_csv('./Turkey_28.csv') 

coords = df1[['tweetID', 'Coordinates']].set_index('tweetID')['Coordinates'] 

coords = coords.dropna().apply(lambda x: eval(x)) 
coords = coords[coords.apply(type) == dict] 

def get_coords(x): 
    return pd.Series(x['coordinates'], index=['Coordinate_one', 'Coordinate_two']) 

coords = coords.apply(get_coords) 

df2 = pd.concat([coords, df1.set_index('tweetID').reindex(coords.index)], axis=1) 

print df2.head(2).T 

tweetID           714602054988275712 
Coordinate_one            23.2745 
Coordinate_two            56.6165 
tweetText  I'm at MK Appartaments in Dobele https://t.co/... 
tweetRetweetCt             0 
tweetFavoriteCt             0 
tweetSource            Foursquare 
tweetCreated         2016-03-28 23:56:21 
userID             782541481 
userScreen           MartinsKnops 
userName            Martins Knops 
userCreateDt         2012-08-26 14:24:29 
userDesc   I See Them Try But They Can't Do What I Do. Be... 
userFollowerCt             137 
userFriendsCt             164 
userLocation          DOB Till I Die 
userTimezone           Casablanca 
Coordinates  {u'type': u'Point', u'coordinates': [23.274462... 
GeoEnabled             True 
Language              en 
+0

Vielen Dank für die Antwort. –

+0

Vielen Dank .. Dies hat die Hälfte meines Problems gelöst. –

1

10K Zeilen sieht nicht alle wie Big Data. Wie viele Spalten hast du?

ich Ihren Code nicht verstehen, es ist gebrochen, aber ein einfaches Beispiel Manipulation:

df = pd.read_cvs('input.csv') 
df['tweetID'] = df['tweetID'] + 1 # add 1 
df.to_csv('output.csv', index=False) 

Wenn Ihre Daten nicht in den Speicher passen könnten Sie mit Dask betrachten.

+0

Vielen Dank für die Antwort. 10K ist nur für eine der Dateien. Ich habe gerne mehr als 100 solcher Dateien. 18 Spalten in der Rohdatei. Und ich möchte nur die "Koordinaten" -Spalten und in der Ausgabedatei mit allen Spalten von der Eingabe säubern. –

+1

Sie können dies iterativ tun. Erstellen Sie eine Liste aller Dateien und verarbeiten Sie sie nacheinander in einer for-Schleife. – dukebody

+0

Ab jetzt möchte ich eine Datei richtig reinigen .. für die ich zu viele Rückschläge konfrontiert :( –