Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Python数据帧类型float64列拆分为多个列_Python_Sql_Pandas_Dataframe_Pyodbc - Fatal编程技术网

如何将Python数据帧类型float64列拆分为多个列

如何将Python数据帧类型float64列拆分为多个列,python,sql,pandas,dataframe,pyodbc,Python,Sql,Pandas,Dataframe,Pyodbc,我需要使用pyodbc对从销售表中提取的一些数据进行一些计算。我能够提取数据,然后我想我会将其加载到一个数据帧中。当数据帧加载时,它将我的数据放在一列中,而实际上它是5个独立的列 query = """SELECT OD.OrderNum, OD.Discount,OD.OrderQty,OD.UnitPrice, (a.OurReqQty - (a.OurJobShippedQty + a.OurStockShippedQty)) AS RemainingQty FROM PU

我需要使用pyodbc对从销售表中提取的一些数据进行一些计算。我能够提取数据,然后我想我会将其加载到一个数据帧中。当数据帧加载时,它将我的数据放在一列中,而实际上它是5个独立的列

query = """SELECT OD.OrderNum, OD.Discount,OD.OrderQty,OD.UnitPrice, (a.OurReqQty - (a.OurJobShippedQty + a.OurStockShippedQty)) AS RemainingQty
        FROM PUB.OrderDtl AS OD
        INNER JOIN PUB.OrderRel AS a ON (OD.Company = a.Company) AND (OD.OrderNum = a.OrderNum) AND (OD.OrderLine = a.OrderLine)
        WHERE (a.OpenRelease = 1)"""
print (query)
cnxn = pyodbc.connect(connection_string)
cursor = cnxn.cursor()
cursor.execute(query)
ab = list(cursor.fetchall())
df = pd.DataFrame(ab, columns=["remain"])
返回这个

[(115702, Decimal('0.00'), Decimal('25.00'), Decimal('145.00000'), Decimal('25.00')), 
(115793, Decimal('0.00'), Decimal('20.00'), Decimal('823.00000'), Decimal('20.00')),
(115793, Decimal('0.00'), Decimal('20.00'), Decimal('823.00000'), Decimal('20.00')), 
(116134, Decimal('0.00'), Decimal('10.00'), Decimal('587.00000'), Decimal('5.00')),
(116282, Decimal('0.00'), Decimal('1.00'), Decimal('699.95000'), Decimal('1.00'))]
当我将其加载到数据帧中时,它看起来是这样的

                          remain
0  [115702, 0.00, 25.00, 145.00000, 25.00]
1  [115793, 0.00, 20.00, 823.00000, 20.00]
2  [115793, 0.00, 20.00, 823.00000, 20.00]
3   [116134, 0.00, 10.00, 587.00000, 5.00]
4    [116282, 0.00, 1.00, 699.95000, 1.00]
我已尝试通过以下方式将其转换为字符串

df.index = df.index.map(str)
df_split = df["remain"].str.split(', ', 1)
但我的分裂看起来像

0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
我知道这是一个格式问题,或者我认为是,但我不知道从哪里开始。我想如果是一根线的话,最容易分开,但也许我遗漏了什么

我认为这篇文章会有帮助,但我认为这需要我导出数据,然后重新阅读

我将非常感谢您的帮助。

试试这个:

col_names = ['OrderNum', 'Discount', 'OrderQty', 'UnitPrice', 'RemainingQty']
df_split = pd.DataFrame(df['remain'].values.tolist(), columns=col_names)
[外]


您看到的行为是由于pyodbc中的
.fetchall()
不返回元组列表,而是返回
pyodbc.Row
对象列表

您应该能够使用pandas的方法直接填充数据帧:

query=”“”\
选择OD.OrderNum,
OD.折扣,
订单数量,
OD单价,
(a.ourreqty-(a.OurJobShippedQty+a.OurStockShippedQty))作为剩余数量
从PUB.OrderDtl作为OD
内部连接PUB.OrderRel作为ON(OD.Company=a.Company)
和(OD.OrderNum=a.OrderNum)
和(OD.OrderLine=a.OrderLine)
其中(a.OpenRelease=1)
"""
cnxn=pyodbc.connect(连接字符串)
df=pd.read\u sql(查询,cnxn)

完美。我一直在错误地尝试分割数据。这将从查询中正确加载它。
   OrderNum  Discount  OrderQty  UnitPrice  RemainingQty
0    115702       0.0      25.0     145.00          25.0
1    115793       0.0      20.0     823.00          20.0
2    115793       0.0      20.0     823.00          20.0
3    116134       0.0      10.0     587.00           5.0
4    116282       0.0       1.0     699.95           1.0