【问题标题】:How to split column from DataFrame with Pandas如何使用 Pandas 从 DataFrame 中拆分列
【发布时间】:2019-01-10 01:29:28
【问题描述】:

我正在将 API 调用中的 CSV 文件读取到带有 pandas 的数据框中,以进行一些数据操作。

目前,我收到以下回复:

n [78]: dfname
Out[78]: 
        productID  amountInStock  index  index_col
7             1.0            NaN      1          7
19            4.0            NaN      2         19
20            1.0            NaN      3         20
22            2.0            NaN      4         22

然后我调用 dfname.reset_index() 来创建更好的索引:

dfname.reset_index()
Out[80]: 
      level_0  productID  amountInStock  index  index_col
0           7        1.0            NaN      1          7
1          19        4.0            NaN      2         19
2          20        1.0            NaN      3         20
3          22        2.0            NaN      4         22

但问题是“productID”系列有两列,我不知道如何拆分它们!

dfname.productID
Out[82]: 
7          1.0
19         4.0
20         1.0
22         2.0

我想要的是 dfname.productID 返回:

dfname.productID
Out[82]: 
7          
19         
20         
22         

productID 中当前的其他数字应分配给“stockqty”。

如何拆分此字段以使其返回两列而不是一列?我试过 .str.split() 无济于事。

对象的属性有Name:productID,Length:2102,dtype:float64

【问题讨论】:

  • 为什么要拆分?只需重命名它们!
  • 我尝试重命名它们,但它只是重命名了两列。似乎 dataframe.productid 包含在 productid 和 stockqty 之前,所以我需要弄清楚如何拆分它们。也许我需要查看原始 CSV 并添加另一个分隔符??

标签: python pandas dataframe indexing series


【解决方案1】:

但问题是“productID”系列有两列,而我 不知道如何拆分它们!

误解就在于此。尽管print 告诉你什么,你没有两列。您有一列带有索引。这正是pd.Series 对象的定义方式。

我想要的是 dfname.productID 返回:

如上所述,这是不可能的。每个系列都有一个索引。这是没有商量余地的。

如何拆分此字段以使其返回两列而不是 一?我试过 .str.split() 无济于事。

这不是前进的方向。特别是,注意 pd.Series.str.split 用于在系列中拆分字符串。你这里没有字符串。相反,请使用 reset_index 并重命名您的列。或者在reset_index 之前命名您的索引。后一个选项对我来说似乎更干净:

df.index.name = 'stockqty'
df = df.reset_index()

print(df)

   stockqty  productID  amountInStock  index  index_col
0         7        1.0            NaN      1          7
1        19        4.0            NaN      2         19
2        20        1.0            NaN      3         20
3        22        2.0            NaN      4         22

【讨论】:

  • 嗯,有道理 - 谢谢。稍后我会给它一个 bash,希望它会给我想要的结果
【解决方案2】:

我在解析csv时通过指定分隔符解决:

        df = pd.read_csv(link, encoding='ISO-8859-1', sep=', ', engine='python')

【讨论】:

    猜你喜欢
    • 2015-04-11
    • 2018-04-07
    • 2016-02-17
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多