【问题标题】:Dataframe with a single Column Value具有单个列值的数据框
【发布时间】:2020-02-01 01:17:08
【问题描述】:

我正在使用 pyodbc 从普遍的数据库中获取数据。

import pyodbc
import pandas as pd

conn_str = "Driver={Pervasive ODBC Client Interface};ServerName=SC220;DBQ=RDP51"
db = pyodbc.connect(conn_str)
c = db.cursor()
sql = "select * from hreserve"

c.execute(sql)
df = pd.DataFrame(c.fetchall())

我得到这样的输出。

                                                   0
0  [G0, N,  , M, 6,     78, LEADER  , 0, 6, 2015-...
1  [G0, N,  , P, 6,     79, 417     , 0, 6, 2015-...
2  [G0,  ,  , P, 6,     82, 420     , 0, 6, 2015-...
3  [G0,  ,  , P, 8,     77, 102     , 0, 2, 2015-...
4  [G0, N,  , P, 6,     80, 202     , 0, 6, 2015-...

我如何将这些数据分成不同的列,然后我可以将列值附加到?

已编辑以显示我如何将数据放入数据框中。

【问题讨论】:

  • 源数据是逗号分隔值的列表吗?如果可能的话,您能否发布完整的数据或在代码中为我们重现?
  • 如何将结果插入数据框中?
  • 你在使用pd.read_sql吗?如果是,请写出完整的代码。从当前代码我看不出你是如何得到这个输出的。
  • 忘记将我得到结果的代码部分添加到数据框中。我已经添加了。

标签: python pandas pyodbc


【解决方案1】:

没有完整的数据集和可重现的示例有点棘手。但是,如果信息以一列的形式出现,您只需将其转换为 series 并附加到新的 DataFrame:

### assuming this is your dataset:
df = pd.DataFrame({0:[
['G0', 'N',  '', 'M', 6,     78, 'LEADER'  , 0, 6],
['G0', 'N',  '', 'P', 6,     79, 417     , 0, 6], 
['G0',  '',  '', 'P', 6,     82, 420     , 0, 6],
['G0',  '', '' , 'P', 8,     77, 102     , 0, 2], 
['G0', 'N', '', 'P', 6,     80, 202     , 0, 6]]}
)

Out[1]: 
                                  0
0  [G0, N, , M, 6, 78, LEADER, 0, 6]
1     [G0, N, , P, 6, 79, 417, 0, 6]
2      [G0, , , P, 6, 82, 420, 0, 6]
3      [G0, , , P, 8, 77, 102, 0, 2]
4     [G0, N, , P, 6, 80, 202, 0, 6]


### assing your data is saved to 'df':
df = df[0].apply(pd.Series)

Out[2]: 
    0  1 2  3  4   5       6  7  8
0  G0  N    M  6  78  LEADER  0  6
1  G0  N    P  6  79     417  0  6
2  G0       P  6  82     420  0  6
3  G0       P  8  77     102  0  2
4  G0  N    P  6  80     202  0  6

【讨论】:

  • 将 pd.Series 应用于列会将元素作为列表分隔到新列中?
  • 如果它们像上面的例子一样嵌套是
  • 你的天才,+1!现在,做所有这些并应用列名。那将是魔法。
  • 之后只需执行 df.columns = ['list','of','names']
【解决方案2】:

假设 df 是您当前的数据框...您可以这样做:

pd.DataFrame(df[0].tolist(), columns = ['c1','c2','c3','c4','c5','c6','c7','c8','c9'])

您可以将列名替换为您想要命名的任何名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多