访问pandas dataframe列中每个对象的属性

时间:2016-10-24 12:07:55

标签: python pandas

考虑以下mwe:

  Button play;
CheckBox Approved;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    play = (Button) findViewById(R.id.playButton);
    Approved = (CheckBox) findViewById(R.id.Approved);
}

public void startNewActivity(View view) {
    final EditText edit = (EditText) findViewById(R.id.editText);
    String Name = (String) edit.getText().toString();
    if (Approved.isChecked()) {
        play.setEnabled(true);
        Intent intent = new Intent(this, GameSetUp.class);
        intent.putExtra("name", Name);
        startActivity(intent);
    } else {
        Toast.makeText(MainActivity.this, "Please Approve!", Toast.LENGTH_LONG).show();
    }
}

我可以通过以下方式访问单个日期的import pandas as pd from decimal import * from datetime import date d1={'Date':date(2016,10,24),'Value':Decimal(20)} d2={'Date':date(2016,10,25),'Value':Decimal(10)} d3={'Date':date(2016,9,25),'Value':Decimal(50)} d4={'Date':date(2016,9,24),'Value':Decimal(5)} df=pd.DataFrame([d1,d2,d3,d4]) 属性:

month

但是df.Date[0].month Out[22]: 10 不会返回包含所有月份的向量,正如我所期望的那样。相反,它会给我一个错误:

  

属性错误:'系列'对象没有属性'月'

有没有一种很好的方法可以实现这一点,而无需迭代数据帧?

1 个答案:

答案 0 :(得分:3)

您需要先转换to_datetime然后再使用dt.month

print (pd.to_datetime(df.Date).dt.month)
0    10
1    10
2     9
3     9
Name: Date, dtype: int64

使用apply的另一个更慢的解决方案:

print (df.Date.apply(lambda x: x.month))
0    10
1    10
2     9
3     9
Name: Date, dtype: int64

<强>计时

#[40000 rows x 2 columns]
df = pd.concat([df]*10000).reset_index(drop=True)

In [292]: %timeit (df.Date.apply(lambda x: x.month))
100 loops, best of 3: 15.8 ms per loop

In [293]: %timeit (pd.to_datetime(df.Date).dt.month)
100 loops, best of 3: 5.44 ms per loop