首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JSON行将Pandas dataframe导出为自定义CSV格式

用JSON行将Pandas dataframe导出为自定义CSV格式
EN

Stack Overflow用户
提问于 2015-08-04 10:13:10
回答 1查看 1.7K关注 0票数 0

在我的熊猫程序中,我正在阅读csv,并将一些列转换为json。

我的csv是这样的:

代码语言:javascript
复制
id_4 col1  col2 .....................................col100
1     43    56  .....................................67
2     46    67   ....................................78

我想要实现的是:

id_4 json

代码语言:javascript
复制
1  {"col1":43,"col2":56,.....................,"col100":67}
2  {"col1":46,"col2":67,.....................,"col100":78}

我尝试过的代码如下:

代码语言:javascript
复制
    df = pd.read_csv('file.csv')
    def func(df):         
        d = [
        dict([
        (colname, row[i])        
        for i,colname in enumerate(df[['col1','col2',............,'col100']])

        for row in zip(df['col1'].astype(str),df['col2'].astype(str),...............,df['col100'].astype(str))]

        format_data = json.dumps(d)
        format_data = format_data[1:len(format_data)-1]
        json_data = '{"key":'+format_data+'}' 
        result.append(pd.Series([df['id_4'].unique()[0],json_data],index = headers))                                        
        return df   

    df.groupby('id_4').apply(func)

b = open('output.csv', 'w')
writer = csv.writer(b)
writer.writerow(headers)
writer.writerows(result[1:len(result)])

CSV包含约10万个数据,内存为(15 MB)。当我执行此操作时,在很长一段时间后,进程将自动终止。我觉得这是记忆问题。

由于我是这条蟒蛇和熊猫的新手,是否有任何方法来优化上面的代码来正常工作,或者增加内存是唯一的方法。

我使用的是5GB内存Linux系统。

编辑:

代码语言:javascript
复制
df = pd.read_csv('Vill_inter.csv')
with open('output.csv', 'w') as f:
    writer = csv.writer(f)
    for id_4, row in itertools.izip(df.index.values, df.to_dict(orient='records')):
        writer.writerow((id_4, json.dumps(row))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-04 12:48:00

熊猫数据可以使用to_json方法在JSON中直接序列化。

您的输出格式不太清楚,但请看以下内容:

代码语言:javascript
复制
# Generate dataframe
df = pd.DataFrame(np.random.randn(5, 100), columns=['col' + str(n) for n in xrange(1, 101)])
# Create id_4 column
df.index += 1
df.index.name = 'id_4'
# Reindex df to have the column id_4 in the output, remove if you only columns1 to X
df.reset_index(drop=False, inplace=True)

# Dump data to disk, or buffer
path = 'out.json'
df.to_json(path, orient='records')

它将比你的循环快得多,并且可能会解决你的错误。

编辑:

显然,输出应该是自定义的文件格式。在这种情况下,您可以使用to_dict(orient='records)输出数据。输出将是一个列表,其中每个元素将一行表示为字典。您可以使用dumps模块的json函数(内置)序列化字典。

就像这样:

代码语言:javascript
复制
import json
import itertools

with open('output.csv', 'w') as f:
    writer = csv.writer(f)
    for id, row in itertools.izip(df.index.values, df.to_dict(orient='records')):
        writer.writerow((id, json.dumps(row)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31806512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档