我想将表格(表示为列表列表)转换为Pandas DataFrame.作为一个极其简化的例子:
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)
Run Code Online (Sandbox Code Playgroud)
将列转换为适当类型的最佳方法是什么,在这种情况下,将第2列和第3列转换为浮点数?有没有办法在转换为DataFrame时指定类型?或者最好先创建DataFrame,然后循环遍历列以更改每列的类型?理想情况下,我想以动态方式执行此操作,因为可能有数百列,我不想确切地指定哪些列属于哪种类型.我可以保证的是,每列包含相同类型的值.
起初,我尝试编写一些看起来像这样的代码:
import numpy as np
import pandas as pd
np.random.seed(2016)
train = pd.DataFrame(np.random.choice([np.nan, 1, 2], size=(10, 3)),
columns=['Age', 'SibSp', 'Parch'])
complete = train.dropna()
complete['AgeGt15'] = complete['Age'] > 15
Run Code Online (Sandbox Code Playgroud)
获得SettingWithCopyWarning后,我尝试使用.loc:
complete.loc[:, 'AgeGt15'] = complete['Age'] > 15
complete.loc[:, 'WithFamily'] = complete['SibSp'] + complete['Parch'] > 0
Run Code Online (Sandbox Code Playgroud)
但是,我仍然得到同样的警告.是什么赋予了?
我有一个DataFrame,我想将几个列从'object'类型更改为'category'.
我可以同时更改几列用于浮动,
dftest[['col3', 'col4', 'col5', 'col6']] = \
dftest[['col3', 'col4', 'col5', 'col6']].astype(float)
Run Code Online (Sandbox Code Playgroud)
对于'类别'我不能这样做,我需要一个接一个地做(或像这里一样循环).
for col in ['col1', 'col2']:
dftest[col] = dftest[col].astype('category')
Run Code Online (Sandbox Code Playgroud)
问题:是否有任何方法可以像"浮动"示例一样对所有想要的列进行更改?
如果我尝试同时做几个列,我有:
dftest[['col1','col2']] = dftest[['col1','col2']].astype('category')
## NotImplementedError: > 1 ndim Categorical are not supported at this time
Run Code Online (Sandbox Code Playgroud)
我目前的工作测试代码:
import numpy as np
import pandas as pd
factors= np.array([
['a', 'xx'],
['a', 'xx'],
['ab', 'xx'],
['ab', 'xx'],
['ab', 'yy'],
['cc', 'yy'],
['cc', 'zz'],
['d', 'zz'],
['d', 'zz'],
['g', 'zz']
])
values = np.random.randn(10,4).round(2)
dftest = pd.DataFrame(np.hstack([factors,values]),
columns = …Run Code Online (Sandbox Code Playgroud)