从长而大的数据集中清理一列
Clean one column from long and big data set
我试图从长数据集中只清理一列。数据有 18 列,超过 10k+ 行,大约 100 多个 csv 文件,其中我只想清理一列。
长列表中只有少数输入字段
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]}
完整的输入文件:Dropbox link
代码:
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']
其他列按输出中的原样写入。这之后怎么办?
输出:
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
可能最简单的建议或指导我举一些例子会很有帮助。
10K 行看起来一点也不像大数据。你有多少列?
我不明白你的代码,它有问题,但是一个简单的例子操作:
df = pd.read_cvs('input.csv')
df['tweetID'] = df['tweetID'] + 1 # add 1
df.to_csv('output.csv', index=False)
如果您的数据不适合内存,您可以考虑使用 Dask。
这里有很多地方不对。
- 该文件不是简单的 csv 文件,您假定的
data = pd.read_csv('input.csv')
. 未正确解析该文件
- 'Coordinates' 字段似乎是
json
字符串
- 同一字段中有 NaN
这就是我到目前为止所做的。您需要自己做一些工作来更恰当地解析此文件
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
我试图从长数据集中只清理一列。数据有 18 列,超过 10k+ 行,大约 100 多个 csv 文件,其中我只想清理一列。
长列表中只有少数输入字段
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]}
完整的输入文件:Dropbox link
代码:
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']
其他列按输出中的原样写入。这之后怎么办?
输出:
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
可能最简单的建议或指导我举一些例子会很有帮助。
10K 行看起来一点也不像大数据。你有多少列?
我不明白你的代码,它有问题,但是一个简单的例子操作:
df = pd.read_cvs('input.csv')
df['tweetID'] = df['tweetID'] + 1 # add 1
df.to_csv('output.csv', index=False)
如果您的数据不适合内存,您可以考虑使用 Dask。
这里有很多地方不对。
- 该文件不是简单的 csv 文件,您假定的
data = pd.read_csv('input.csv')
. 未正确解析该文件
- 'Coordinates' 字段似乎是
json
字符串 - 同一字段中有 NaN
这就是我到目前为止所做的。您需要自己做一些工作来更恰当地解析此文件
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