我正在与以下df合作:
c.sort_values('2005', ascending=False).head(3)
GeoName ComponentName IndustryId IndustryClassification Description 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
37926 Alabama Real GDP by state 9 213 Support activities for mining 99 98 117 117 115 87 96 95 103 102 (NA)
37951 Alabama Real GDP by state 34 42 Wholesale trade 9898 10613 10952 11034 11075 9722 9765 9703 9600 9884 10199
37932 Alabama Real GDP by state 15 327 Nonmetallic mineral products manufacturing 980 968 940 1084 861 724 714 701 589 641 (NA)
我想强制所有年份的数字:
c['2014'] = pd.to_numeric(c['2014'], errors='coerce')
有没有一个简单的方法来做这件事,还是我必须把它们全部打印出来?
您可以使用:
print df.columns[5:]
Index([u'2004', u'2005', u'2006', u'2007', u'2008', u'2009', u'2010', u'2011',
u'2012', u'2013', u'2014'],
dtype='object')
for col in df.columns[5:]:
df[col] = pd.to_numeric(df[col], errors='coerce')
print df
GeoName ComponentName IndustryId IndustryClassification \
37926 Alabama Real GDP by state 9 213
37951 Alabama Real GDP by state 34 42
37932 Alabama Real GDP by state 15 327
Description 2004 2005 2006 2007 \
37926 Support activities for mining 99 98 117 117
37951 Wholesale trade 9898 10613 10952 11034
37932 Nonmetallic mineral products manufacturing 980 968 940 1084
2008 2009 2010 2011 2012 2013 2014
37926 115 87 96 95 103 102 NaN
37951 11075 9722 9765 9703 9600 9884 10199.0
37932 861 724 714 701 589 641 NaN
另一个带有过滤器的解决方案
:
print df.filter(like='20')
2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
37926 99 98 117 117 115 87 96 95 103 102 (NA)
37951 9898 10613 10952 11034 11075 9722 9765 9703 9600 9884 10199
37932 980 968 940 1084 861 724 714 701 589 641 (NA)
for col in df.filter(like='20').columns:
df[col] = pd.to_numeric(df[col], errors='coerce')
print df
GeoName ComponentName IndustryId IndustryClassification \
37926 Alabama Real GDP by state 9 213
37951 Alabama Real GDP by state 34 42
37932 Alabama Real GDP by state 15 327
Description 2004 2005 2006 2007 \
37926 Support activities for mining 99 98 117 117
37951 Wholesale trade 9898 10613 10952 11034
37932 Nonmetallic mineral products manufacturing 980 968 940 1084
2008 2009 2010 2011 2012 2013 2014
37926 115 87 96 95 103 102 NaN
37951 11075 9722 9765 9703 9600 9884 10199.0
37932 861 724 714 701 589 641 NaN
另一种方法是使用应用
,一个衬里:
cols = ['col1', 'col2', 'col3']
data[cols] = data[cols].apply(pd.to_numeric, errors='coerce', axis=1)
更新:您不需要在以后转换您的值,您可以在读取CSV时动态转换:
In [165]: df=pd.read_csv(url, index_col=0, na_values=['(NA)']).fillna(0)
In [166]: df.dtypes
Out[166]:
GeoName object
ComponentName object
IndustryId int64
IndustryClassification object
Description object
2004 int64
2005 int64
2006 int64
2007 int64
2008 int64
2009 int64
2010 int64
2011 int64
2012 int64
2013 int64
2014 float64
dtype: object
如果需要将多列转换为数字数据类型,请使用以下技术:
样本来源DF:
In [271]: df
Out[271]:
id a b c d e f
0 id_3 AAA 6 3 5 8 1
1 id_9 3 7 5 7 3 BBB
2 id_7 4 2 3 5 4 2
3 id_0 7 3 5 7 9 4
4 id_0 2 4 6 4 0 2
In [272]: df.dtypes
Out[272]:
id object
a object
b int64
c int64
d int64
e int64
f object
dtype: object
将选定的列转换为数字dtype:
In [273]: cols = df.columns.drop('id')
In [274]: df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
In [275]: df
Out[275]:
id a b c d e f
0 id_3 NaN 6 3 5 8 1.0
1 id_9 3.0 7 5 7 3 NaN
2 id_7 4.0 2 3 5 4 2.0
3 id_0 7.0 3 5 7 9 4.0
4 id_0 2.0 4 6 4 0 2.0
In [276]: df.dtypes
Out[276]:
id object
a float64
b int64
c int64
d int64
e int64
f float64
dtype: object
PS如果你想选择所有的字符串
(对象
)列使用以下简单的技巧:
cols = df.columns[df.dtypes.eq('object')]
问题内容: 我有两个,都被索引。我需要将元素添加在一起以形成一个new ,但前提是索引和列相同。如果该项不存在于之一,则应将其视为零。 我试过使用,但这无论索引和列如何。还尝试了一个简单的方法,但是如果两个数据框都没有该元素,则给出a 。 有什么建议? 问题答案: 怎么样
如何用于返回添加了多个新列的原始DataFrame的副本? 预期结果: 上面的示例导致: 。 背景: Pandas中的函数获取与新分配列关联的相关数据帧的副本,例如:。 此函数的0.19.2文档说明可以向数据帧添加多个列。 可以在同一分配中分配多个列,但不能引用在同一分配调用中创建的其他列。 此外: 参数: kwargs:关键字,值对 关键字是列名。 函数的源代码声明它接受字典:
问题内容: 我有一个包含多个列的数据集,我希望对其进行一次热编码。但是,我不想为每个编码都有编码,因为所说的列与所说的项目有关。我想要的是一组使用所有列的虚拟变量。请参阅我的代码以获得更好的解释。 假设我的数据框如下所示: 如果我执行 输出将是 但是,我想获得的是这样的东西: 代替具有表示编码,例如多列的和,我只希望有一组(,,等等)与值时任何在列中的值的,,显示出来。 需要说明的是,在我的原始数
我对熊猫很陌生,我想知道如何同时给熊猫添加多个列。感谢您的帮助。理想情况下,我想一步到位,而不是多步重复。。。
我想给我的 以下是我的代码: 当我运行这个,我得到以下错误: 我怎样才能解决这个问题?
我有下面的数据框- 我需要一个全新的数据帧,,有3列:1.0、2.0(结合2.0和4.0)和3.0(结合3.0和5.0)。 结果将是- 您可以预期合并列中不会有重叠的值;如果一行中的一列具有有效值,那么其他列将具有NaN值。 我试过了- 而且它并没有按预期的那样工作。有没有简单有效的方法来做到这一点?