我想将表格(表示为列表列表)转换为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,然后循环遍历列以更改每列的类型?理想情况下,我想以动态方式执行此操作,因为可能有数百列,我不想确切地指定哪些列属于哪种类型.我可以保证的是,每列包含相同类型的值.
是否有任何方法可以None在Python 中用Pandas 替换值?
您可以使用df.replace('pre', 'post')并可以将值替换为另一个值,但如果您想要替换None值,则无法执行此操作,如果您尝试,则会得到一个奇怪的结果.
所以这是一个例子:
df = DataFrame(['-',3,2,5,1,-5,-1,'-',9])
df.replace('-', 0)
Run Code Online (Sandbox Code Playgroud)
返回成功的结果.
但,
df.replace('-', None)
Run Code Online (Sandbox Code Playgroud)
返回以下结果:
0
0 - // this isn't replaced
1 3
2 2
3 5
4 1
5 -5
6 -1
7 -1 // this is changed to `-1`...
8 9
Run Code Online (Sandbox Code Playgroud)
为什么会返回这么奇怪的结果?
由于我想将这个数据帧倒入MySQL数据库,因此我无法将NaN值放入数据框中的任何元素中,而是想放入None.当然,您可以先更改'-'为NaN然后转换NaN为None,但我想知道为什么数据框以这种可怕的方式运行.
假设我在数据框中有一个列,其中包含一些数字和一些非数字
>> df['foo']
0 0.0
1 103.8
2 751.1
3 0.0
4 0.0
5 -
6 -
7 0.0
8 -
9 0.0
Name: foo, Length: 9, dtype: object
Run Code Online (Sandbox Code Playgroud)
如何将此列转换为np.float,并将其他所有不浮动的列转换为NaN?
当我尝试:
>> df['foo'].astype(np.float)
Run Code Online (Sandbox Code Playgroud)
要么
>> df['foo'].apply(np.float)
Run Code Online (Sandbox Code Playgroud)
我明白了 ValueError: could not convert string to float: -
我的代码中有这一行将数据转换为数字...
data["S1Q2I"] = data["S1Q2I"].convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)
问题是现在新的pandas发布(0.17.0)说这个函数已被弃用..这是错误:
FutureWarning: convert_objects is deprecated.
Use the data-type specific converters pd.to_datetime,
pd.to_timedelta and pd.to_numeric.
data["S3BD5Q2A"] = data["S3BD5Q2A"].convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)
所以,我去了新的文档,我找不到任何如何使用新函数转换我的数据的例子......
它只说这个:
"不推荐使用DataFrame.convert_objects,而选择类型特定的函数pd.to_datetime,pd.to_timestamp和pd.to_numeric(0.17.0中的新增功能)(GH11133)."
你能帮忙的话,我会很高兴!
我有一个227x4 DataFrame,国家名称和数值要清理(争吵?).
这是DataFrame的抽象:
import pandas as pd
import random
import string
import numpy as np
pdn = pd.DataFrame(["".join([random.choice(string.ascii_letters) for i in range(3)]) for j in range (6)], columns =['Country Name'])
measures = pd.DataFrame(np.random.random_integers(10,size=(6,2)), columns=['Measure1','Measure2'])
df = pdn.merge(measures, how= 'inner', left_index=True, right_index =True)
df.iloc[4,1] = 'str'
df.iloc[1,2] = 'stuff'
print(df)
Country Name Measure1 Measure2
0 tua 6 3
1 MDK 3 stuff
2 RJU 7 2
3 WyB 7 8
4 Nnr str 3
5 rVN 7 4
Run Code Online (Sandbox Code Playgroud)
如何np.nan在不触及国家/地区名称的情况下在所有列中替换字符串值? …
我正在努力弄清楚如何从pandas数据框中删除行,其中两个指定的列在一行中具有相同的值.
例如,在下面的示例中,我想删除第2列和第4列中具有重复值的行.
例如:
Column1 Column2 Column3 Column4
Pat 123 John 456
Pat 123 John 345
Jimmy 678 Mary 678
Larry 678 James 983
Run Code Online (Sandbox Code Playgroud)
会变成:
Column1 Column2 Column3 Column4
Pat 123 John 456
Pat 123 John 345
Larry 678 James 983
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏,谢谢!
我有一个df列,其值的范围是-5到10。我想将值<= -1更改为negative,将所有0值更改为neutral,将所有值> = 1更改为positive。但是,下面的代码为“负”产生以下错误。
# Function to change values to labels
test.loc[test['sentiment_score'] > 0, 'sentiment_score'] = 'positive'
test.loc[test['sentiment_score'] == 0, 'sentiment_score'] = 'neutral'
test.loc[test['sentiment_score'] < 0, 'sentiment_score'] = 'negative'
Data: Data After Code:
Index Sentiment Index Sentiment
0 2 0 positive
1 0 1 neutral
2 -3 2 -3
3 4 3 positive
4 -1 4 -1
... ...
k 5 k positive
Run Code Online (Sandbox Code Playgroud)
pandas._libs.ops.scalar_compare TypeError中的文件“ pandas_libs \ ops.pyx”,行98,TypeError:'str'和'int实例之间不支持'<='
我认为这与将负数视为字符串而不是float / int的函数有关,但是我尝试了以下代码来更正此错误,并且它什么都不会改变。任何帮助,将不胜感激。
test['sentiment_score'] = test['sentiment_score'].astype(float) …Run Code Online (Sandbox Code Playgroud)