Unexpected string->float conversion in DataFrame.groupby().apply() (original) (raw)

Code Sample, a copy-pastable example if possible

Your code here

import pandas as pd df = pd.DataFrame({'A':[10, 20, 30], 'B': [ 'foo', '3', '4'], 'T': [pd.Timestamp("12:31:22")]*3}) def get_B(g): return g.iloc[0][['B']] print df.groupby('A').apply(get_B)

Observed output:

  B

A
10 NaN 20 3.0 30 4.0

Problem description

groupby.apply() does an unexpected conversion from string to float for column 'B' in the example above. The bug is triggered only when both of the following happen:

  1. A column ('B' in the example above) has string values, some of which are parseable as numbers and some which are not.
  2. Another column ('T' in the example above) in the dataframe has timestamps.

Expected Output

Output of pd.show_versions()

Details# Paste the output here pd.show_versions() here

INSTALLED VERSIONS

commit: None
python: 2.7.13.final.0
python-bits: 64
OS: Windows
OS-release: 7
machine: AMD64
processor: Intel64 Family 6 Model 60 Stepping 3, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None

pandas: 0.19.2
nose: 1.3.7
pip: 9.0.1
setuptools: 27.2.0
Cython: 0.25.2
numpy: 1.11.3
scipy: 0.18.1
statsmodels: 0.6.1
xarray: None
IPython: 5.1.0
sphinx: 1.5.1
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2016.10
blosc: None
bottleneck: 1.2.0
tables: 3.2.2
numexpr: 2.6.1
matplotlib: 1.5.1
openpyxl: 2.4.0
xlrd: 1.0.0
xlwt: 1.1.2
xlsxwriter: 0.9.6
lxml: 3.7.2
bs4: 4.5.3
html5lib: None
httplib2: None
apiclient: None
sqlalchemy: 1.1.4
pymysql: None
psycopg2: None
jinja2: 2.8.1
boto: 2.45.0
pandas_datareader: 0.2.1