相关疑难解决方法(0)

如何将JSON转换为CSV?

我有一个JSON文件,我想要转换为CSV文件.我怎么能用Python做到这一点?

我试过了:

import json
import csv

f = open('data.json')
data = json.load(f)
f.close()

f = open('data.csv')
csv_file = csv.writer(f)
for item in data:
    csv_file.writerow(item)

f.close()
Run Code Online (Sandbox Code Playgroud)

但是,它没有用.我正在使用Django,我收到的错误是:

import json
import csv

f = open('data.json')
data = json.load(f)
f.close()

f = open('data.csv')
csv_file = csv.writer(f)
for item in data:
    f.writerow(item)  # ? changed

f.close()
Run Code Online (Sandbox Code Playgroud)

那么,我尝试了以下内容:

[{
        "pk": 22,
        "model": "auth.permission",
        "fields": {
            "codename": "add_logentry",
            "name": "Can add log entry",
            "content_type": 8
        }
    }, {
        "pk": 23,
        "model": "auth.permission",
        "fields": {
            "codename": "change_logentry", …
Run Code Online (Sandbox Code Playgroud)

python csv json

161
推荐指数
11
解决办法
41万
查看次数

为什么使用'eval'是一种不好的做法?

我正在使用以下课程轻松存储我的歌曲数据.

class Song:
    """The class to store the details of each song"""
    attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
    def __init__(self):
        for att in self.attsToStore:
            exec 'self.%s=None'%(att.lower()) in locals()
    def setDetail(self, key, val):
        if key in self.attsToStore:
            exec 'self.%s=val'%(key.lower()) in locals()
Run Code Online (Sandbox Code Playgroud)

我觉得这比写出一个if/else块更具可扩展性.但是,eval似乎被认为是一种不良做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?

python eval

125
推荐指数
6
解决办法
3万
查看次数

如何在纯Python中沙盒Python?

我正在开发纯Python的网页游戏,并希望有一些简单的脚本可用于更多动态的游戏内容.特权用户可以实时添加游戏内容.

如果脚本语言可以是Python,那就太好了.但是,由于恶意用户可能会造成严重破坏,因此无法在访问游戏运行环境的情况下运行.是否可以在纯Python中运行沙盒Python?

更新:事实上,由于真正的Python支持会有点过分,因此使用Pythonic语法的简单脚本语言将是完美的.

如果没有任何Pythonic脚本解释器,是否有任何其他开源脚本解释器用纯Python编写,我可以使用?要求是对变量,基本条件和函数调用(不是定义)的支持.

python scripting

51
推荐指数
4
解决办法
3万
查看次数

熊猫数据框中的字典列

我有一个csv,我正在读一个熊猫数据帧.然而,其中一列是字典形式.这是一个例子:

ColA, ColB, ColC, ColdD
20, 30, {"ab":"1", "we":"2", "as":"3"},"String"
Run Code Online (Sandbox Code Playgroud)

如何将其转换为如下所示的数据框:

ColA, ColB, AB, WE, AS, ColdD
20, 30, "1", "2", "3", "String"
Run Code Online (Sandbox Code Playgroud)

编辑 我修复了问题,它看起来像这样但是是一个需要解析的字符串,而不是dict对象.

python dictionary pandas

12
推荐指数
3
解决办法
2万
查看次数

如何将嵌套的 JSON 下载到 Pandas 数据帧中

希望提高我的数据科学技能。我正在练习从体育网站拉取 url 数据,并且 json 文件有多个嵌套字典。我希望能够提取这些数据以在 matplotlib 等中映射我自己的排行榜的自定义形式,但是我很难将 json 转换为可行的 df。

主要网站为:https : //www.usopen.com/scoring.html

看看背景,我相信实时信息是从下面短代码中列出的链接中提取的。我正在使用 Jupyter 笔记本。我可以成功拉取数据。

但是正如您所看到的,它正在提取多个嵌套字典,这使得提取简单的数据帧变得非常困难。

只是想得到球员,比分达到标准杆,总分和回合拉。任何帮助将不胜感激,谢谢!

import pandas as pd
import urllib as ul
import json
url = "https://gripapi-static-pd.usopen.com/gripapi/leaderboard.json"
response = ul.request.urlopen(url)
data = json.loads(response.read())
print(data)
Run Code Online (Sandbox Code Playgroud)

python json pandas json-normalize

10
推荐指数
2
解决办法
644
查看次数

将Pandas单元格中的列表拆分为多个列

我有一个非常简单的Pandas dataframe地方,每个单元格包含一个列表.我想将列表中的每个元素拆分为它自己的列.我可以通过导出值然后创建新值来实现dataframe.这似乎不是一个好方法,特别是如果我dataframe在列表列之外有一个列.

import pandas as pd

df = pd.DataFrame(data=[[[8,10,12]],
                        [[7,9,11]]])

df = pd.DataFrame(data=[x[0] for x in df.values])
Run Code Online (Sandbox Code Playgroud)

期望的输出:

   0   1   2
0  8  10  12
1  7   9  11
Run Code Online (Sandbox Code Playgroud)

基于@Psidom回复的后续行动:

如果我确实有第二列:

df = pd.DataFrame(data=[[[8,10,12], 'A'],
                        [[7,9,11], 'B']])
Run Code Online (Sandbox Code Playgroud)

我怎么不松开其他栏?

期望的输出:

   0   1   2  3 
0  8  10  12  A
1  7   9  11  B
Run Code Online (Sandbox Code Playgroud)

python list dataframe python-2.7 pandas

8
推荐指数
2
解决办法
9628
查看次数

python中的TMX(翻译记忆库eXchange)文件

是否有用于处理python中的TMX(翻译记忆库eXchange)文件的模块,如果没有的话,还有另一种方法吗?

就目前而言,我有一个2gb的巨大文件,上面有法英字幕。是否有可能处理这样的文件,还是我必须将其分解?

tmx python-3.x pytmx

5
推荐指数
2
解决办法
2015
查看次数

将dict的pandas数据框列展开为数据框列

我有一个 Pandas DataFrame,其中一列是一系列 dicts,如下所示:

   colA  colB                                  colC
0     7     7  {'foo': 185, 'bar': 182, 'baz': 148}
1     2     8  {'foo': 117, 'bar': 103, 'baz': 155}
2     5    10  {'foo': 165, 'bar': 184, 'baz': 170}
3     3     2  {'foo': 121, 'bar': 151, 'baz': 187}
4     5     5  {'foo': 137, 'bar': 199, 'baz': 108}
Run Code Online (Sandbox Code Playgroud)

我希望来自 dicts的foo,barbaz键值对成为我数据框中的列,这样我就得到了这样的结果:

   colA  colB  foo  bar  baz
0     7     7  185  182  148
1     2     8  117  103  155
2     5    10 …
Run Code Online (Sandbox Code Playgroud)

python dictionary series dataframe pandas

5
推荐指数
1
解决办法
1651
查看次数

从 Pandas 列中提取嵌套字典

我尝试从我的 Pandas 数据框中的嵌套字典创建一个数据框,但我无法让它工作......

我的数据框:

    created_at                  selected
    2019-08-13T12:24:53+00:00   {"982813":false,"1786112":true,"3002218":false}
    2019-08-31T13:47:51+00:00   {"309279":true,"1903384":false}
        ...
Run Code Online (Sandbox Code Playgroud)

我想用选定的列数据创建一个新的 df 格式如下:

        created_at                  ID            Value
        2019-08-13T12:24:53+00:00   982813        false    
        2019-08-13T12:24:53+00:00   1786112       true
        2019-08-13T12:24:53+00:00   3002218       false
        2019-08-31T13:47:51+00:00   309279        true
        2019-08-31T13:47:51+00:00   1903384       false
        ...
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用 expand() 和 json_normalize() 没有成功,所以我决定使用 pd.DataFrame.from_dict() 和如下所示的 for 循环,但我遇到了错误。

x = {}
for row in df.selected:
    pd.DataFrame.from_dict(row, orient='index')
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

AttributeError: 'str' 对象没有属性 'values'

我仍然是 python 的初学者,所以如果有人作为一个想法/解释,我会全神贯注。

python pandas

5
推荐指数
1
解决办法
1352
查看次数

如何使用 NaN 对列进行 json_normalize

  • 这个问题特定于a中的数据列pandas.DataFrame
  • 此问题取决于列中的值是否为strdictlisttype。
  • 这个问题解决了在不是有效选项NaN时处理值的问题。df.dropna().reset_index(drop=True)

情况1

  • 对于类型的列,在使用 之前,str必须将列中的值转换为dict类型,使用, 。ast.literal_eval.json_normalize
import numpy as np
import pandas as pd
from ast import literal_eval

df = pd.DataFrame({'col_str': ['{"a": "46", "b": "3", "c": "12"}', '{"b": "2", "c": "7"}', '{"c": "11"}', np.NaN]})

                            col_str
0  {"a": "46", "b": "3", "c": "12"}
1              {"b": "2", "c": "7"}
2                       {"c": "11"}
3                               NaN

type(df.iloc[0, 0])
[out]: str

df.col_str.apply(literal_eval)
Run Code Online (Sandbox Code Playgroud)

错误:

df.col_str.apply(literal_eval) results in ValueError: malformed …
Run Code Online (Sandbox Code Playgroud)

python json dictionary pandas json-normalize

5
推荐指数
1
解决办法
5806
查看次数