ele*_*ora 7 python dataframe pandas
我有一个大的csv文件,其中的行看起来像
stringa,stringb
stringb,stringc
stringd,stringa
Run Code Online (Sandbox Code Playgroud)
我需要转换它,以便id从0开始连续编号.在这种情况下,以下方法可行
0,1
1,2
3,0
Run Code Online (Sandbox Code Playgroud)
我目前的代码如下:
import csv
names = {}
counter = 0
with open('foo.csv', 'rb') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row[0] in names:
id1 = row[0]
else:
names[row[0]] = counter
id1 = counter
counter += 1
if row[1] in names:
id2 = row[1]
else:
names[row[1]] = counter
id2 = counter
counter += 1
print id1, id2
Run Code Online (Sandbox Code Playgroud)
Python dicts遗憾地使用了大量内存,而且我的输入很大.
当输入太大而dict不适合内存时,我该怎么办?
如果有更好/更快的方法来解决这个问题,我也会感兴趣.
df = pd.DataFrame([['a', 'b'], ['b', 'c'], ['d', 'a']])
v = df.stack().unique()
v.sort()
f = pd.factorize(v)
m = pd.Series(f[0], f[1])
df.stack().map(m).unstack()
Run Code Online (Sandbox Code Playgroud)