将pandas数据框转换为系列数组

时间:2019-04-27 03:59:08

标签: python pandas

现在不推荐使用的to_matrix values 将提供来自 dataframe 的数组。但是,我想使用数据框的“功能”-这意味着将列作为 Series 使用。如何从数据框中提取系列的列表?

4 个答案:

答案 0 :(得分:4)

我认为您只需要转移.values的收益

df.values.T.tolist()
Out[1321]: 
[['a1', 'a3', 'a1', 'a1', 'a2', 'a2', 'a3', 'a4', 'a4', 'a1'],
 ['c1', 'c1', 'c1', 'c2', 'c2', 'c2', 'c3', 'c4', 'c5', 'c5']]

或者只是

df.values.T
Out[1322]: 
array([['a1', 'a3', 'a1', 'a1', 'a2', 'a2', 'a3', 'a4', 'a4', 'a1'],
       ['c1', 'c1', 'c1', 'c2', 'c2', 'c2', 'c3', 'c4', 'c5', 'c5']],
      dtype=object)

如果需要Series的列表,我们也可以进行groupby

[y for _,y in df.groupby(level=0,axis=1)]
Out[1328]: 
[  airport
 0      a1
 1      a3
 2      a1
 3      a1
 4      a2
 5      a2
 6      a3
 7      a4
 8      a4
 9      a1,   carrier
 0      c1
 1      c1
 2      c1
 3      c2
 4      c2
 5      c2
 6      c3
 7      c4
 8      c5
 9      c5]

数据输入

df
Out[1329]: 
  airport carrier
0      a1      c1
1      a3      c1
2      a1      c1
3      a1      c2
4      a2      c2
5      a2      c2
6      a3      c3
7      a4      c4
8      a4      c5
9      a1      c5

答案 1 :(得分:2)

您可以通过列表理解来做到这一点:

@objc func keyboardWillShow(notification: NSNotification) {
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue,
            let currentTextField = view.getSelectedTextField() {

        let keyboardHeight = keyboardSize.height
        let textFieldFrame = currentTextField.superview?.convert(currentTextField.frame, to: nil)            
        }
    }
}

getSelectedTextField()返回给定列中值的// Inside UIView Extension // Get currently active textfield func getSelectedTextField() -> UITextField? { let totalTextFields = getTextFieldsInView(view: self) for textField in totalTextFields{ if textField.isFirstResponder{ return textField } } return nil } func getTextFieldsInView(view: UIView) -> [UITextField] { var totalTextFields = [UITextField]() for subview in view.subviews as [UIView] { if let textField = subview as? UITextField { totalTextFields += [textField] } else { totalTextFields += getTextFieldsInView(view: subview) } } return totalTextFields } }

答案 2 :(得分:2)

仅取值即可获得.to_dict('Series')的系列列表。

list(df.to_dict('Series').values())

[0    a1
 1    a3
 2    a1
 3    a1
 4    a2
 5    a2
 6    a3
 7    a4
 8    a4
 9    a1
 Name: airport, dtype: object, 0    c1
 1    c1
 2    c1
 3    c2
 4    c2
 5    c2
 6    c3
 7    c4
 8    c5
 9    c5
 Name: carrier, dtype: object]

列表中的每个元素都是一个系列:

type(list(df.to_dict('Series').values())[0])
#pandas.core.series.Series

答案 3 :(得分:1)

您可以在numpy结构化数组中跟踪与DataFrame中相同的许多信息(系列之间不同的dtype,系列名称)。熊猫有一个方便的方法可以做到这一点。我正在使用@Wen的示例数据。


u = df.to_records(index=False)

rec.array([('a1', 'c1'), ('a3', 'c1'), ('a1', 'c1'), ('a1', 'c2'),
           ('a2', 'c2'), ('a2', 'c2'), ('a3', 'c3'), ('a4', 'c4'),
           ('a4', 'c5'), ('a1', 'c5')],
          dtype=[('airport', 'O'), ('carrier', 'O')])

u['airport']

array(['a1', 'a3', 'a1', 'a1', 'a2', 'a2', 'a3', 'a4', 'a4', 'a1'],
      dtype=object)