如果输入是整个数据帧,则按照我读过的方式在数据帧上应用 pandas to_numeric 或 to_datetime 函数可以正常工作,但如果输入是数据帧的多个列的一部分则不行。
我是做错了什么还是这是意外行为?
考虑:
import pandas as pd
import numpy as np
test_df = pd.DataFrame(np.random.randn(50,5))
print(test_df.iloc[:25,2:4])
pd.to_numeric(test_df.iloc[:25, 2:4])
产生错误
ValueError:缓冲区的维数错误(预期为 1,得到 2)
我在 Python 3.4.3 的 Anaconda 堆栈 (2.4) 上运行 pandas v17.0.0。
通过在数据框 iloc 选择上应用来运行 to_numeric,即
test_df.iloc[:25, 2:4].apply(pd.to_numeric)
工作正常。
上面的这种行为,即在数据帧的切片上,是故意的吗? 谢谢!
最佳答案
这也不适用于完整的数据帧(pd.to_numeric(test_df)
将给出相同的错误)作为 to_datetime
和 to_numeric
函数仅设计用于处理一维数据(系列、一维数组、列表)。查看docstring .
因此,如果您想同时在多个列上使用此函数,您使用 apply
的方法是正确的。
关于python - pandas to_numeric/to_* 如果输入是数据帧切片则引发缓冲区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735874/