如何使用Pandas从DataFrame拆分列

时间:2018-08-02 10:05:35

标签: python pandas dataframe indexing series

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

当前,我收到以下答复:

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()无济于事。

对象的属性为名称:productID,长度:2102,dtype:float64

2 个答案:

答案 0 :(得分:2)

  

但是问题是'productID'系列有两列,而我   无法解决如何拆分它们!

其中存在误解。尽管print告诉您,但您没有2列。您有一列带有索引的列。正是这样定义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

答案 1 :(得分:0)

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

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