【问题标题】:How to address data imported with pandas?如何处理使用 pandas 导入的数据?
【发布时间】:2016-08-22 07:01:57
【问题描述】:

我正在使用 pandas 导入一些 .dta 文件并使用 numpy/sklearn 对场景进行一些统计。我将数据称为sample 我执行以下操作:

#   import neccessary packages
import pandas as pd
import numpy as np
import sklearn as skl

#   import data and give a little overview (col = var1-var5, 20 rows)
sample = pd.read_stata('sample_data.dta')
print('variables in dataset')
print(sample.dtypes)
print('first 5 rows and all cols')
print(sample[0:5])

# generate a new var
var6 = sample.var1/sample.var3

如果我直接按变量名称寻址变量(var1sample.var1),则会收到错误消息。我觉得总是包含sample. 有点乏味。有什么好方法可以直接通过变量名调用变量吗?

【问题讨论】:

  • var1 = sample.var1 ?
  • 我当然可以这样做..但他们不是更好的方法吗?在数据集中我有 >500 var :(
  • 请注意,创建的变量一开始不会是副本,但一些修改会破坏该系列和 DataFrame 之间的关系。这是有风险的。

标签: python variables pandas error-handling


【解决方案1】:

请看这个人为的例子。通常我不喜欢搞乱locals()globals(),但我没有看到更干净的方法:

class A:
    def __init__(self):
        self.var1 = 1
        self.var2 = 2

obj = A()

locals().update(obj.__dict__)

print(var1)
print(var2)
>> 1
   2

由于您使用的是数据框,因此您必须循环通过 df.columns 而不是 __dict__。您的代码将类似于:

import pandas as pd

df = pd.DataFrame({'a':[1]})

for col in df.columns:
     locals().update({col: df[col]})

print(a)
>> 0    1
   Name: a, dtype: int64

这样做时你应该非常小心,因为这会覆盖你可能已经用相同名称定义的任何变量,例如:

import pandas as pd

a = 7

print(a)
>> 7

df = pd.DataFrame({'a':[1]})

for col in df.columns:
     locals().update({col: df[col]})

print(a)
>> 0    1
   Name: a, dtype: int64

【讨论】:

  • 谢谢!这样就可以了。问题是由.dta 格式引起的吗?我相信如果一个人使用.csv 来代替,可以直接调用变量......
  • @RachelSleeps 我很害怕我没有关注你的问题,但如果你使用的是.csv 文件,你可以用DictReader 解析它,它将每一行直接解析为字典
  • 我试过了,效果很好。非常感谢!...但是,在这种特殊情况下,这对我来说似乎太危险了。我将继续使用更乏味的dataset_name.var_name 版本。
  • @RachelSleeps DeepSpace 为您的问题提供了绝对完美的答案。但是,您要求做的似乎是一个非常糟糕的主意。如果您有 500 多列,那么所有这些列都被愉快地封装在一个整洁的命名空间 sample 中,我认为没有充分的理由让它变得不整洁。如果您担心方便,请尝试重命名变量或分配一个新变量s = sample
  • 这正是我所做的。我从外部来源获取数据。开始时相当不便 - 因为 var 名称有时会有所不同。谢谢大家!
猜你喜欢
  • 2013-05-20
  • 2018-12-29
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多