Re:PandaPy has the speed of NumPy and the usability of Pandas
by qwhelan on Friday January 24, 2020 @09:52PM
(#22144313)
> Occurs in pandas 0.25.1 (and the release notes for 0.25.2 and 0.25.3 don't mention such a change), so that would likely be still the case in the latest stable release.
It was released in 0.24.0: https://pandas.pydata.org/pandas-docs/stable/user_guide/inte...
For example:
pd.DataFrame({"foo": [1,2,3,4,None]}, dtype=pd.Int64Dtype())
foo
0 1
1 2
2 3
3 4
4 <NA>
pd.DataFrame({"foo": [1,2,3,4,None,9223372036854775807,9223372036854775806]}, dtype=pd.Int64Dtype())
foo
0 1
1 2
2 3
3 4
4 <NA>
5 9223372036854775807
6 9223372036854775806
Re:PandaPy has the speed of NumPy and the usability of Pandas
by jfim on Friday January 24, 2020 @10:04PM
(#22144353)
Sure, if you specify the type. It's still a gotcha because the default behavior is to upcast to floating point unless the type is defined for every integer column of every data frame, which isn't very pythonic.
The example with the (incorrect) join above shows how even other operations can cause this type conversion.
No, join does an index merge. For example, if you try to join with string keys, it'll throw an error (because strings and numeric indexes aren't compatible).
If you try to join with numeric keys: Or even worse if your numeric values are within the range for indexes, which kind of looks right if you're not paying attention: Whereas merge does what one would expect: >> What if they're optional? pd.DataFrame({'foo': [1,2,3,None]}) will silently change your integers to floating point values.> This was a long standing issue but is no longer true.
Occurs in pandas 0.25.1 (and the release notes for 0.25.2 and 0.25.3 don't mention such a change), so that would likely be still the case in the latest stable release.
It's also a lossy conversion if the integer values are large enough: >> Want to check if a dataframe is empty? Unlike lists or dicts, trying to turn a dataframe into a truth value will throw ValueError.> Those are 1D types where that's simple to reason about. It's not as straightforward in higher dimensions (what's the truth value of a (0, N) array?), which is why .empty exists
It's not very pythonic, though. A definition of "all dimensions greater than 0" would've been much less surprising.