Val*_*rch 5 python csv types type-inference pandas
我需要为我正在构建的推荐程序加载一个大的 .csv 文件(大约有 1000 万条记录)。我的输入文件如下所示(k 接近 ~400 列):
P1 P2 ... Pk
a 1 1 ... 0
b 0 0 ... 0
c 0 0 ... 1
Run Code Online (Sandbox Code Playgroud)
我尝试通过此调用读取我的文件:
pd.read_csv(url,header=0, sep="\t",index_col=0,encoding="utf-8")
Run Code Online (Sandbox Code Playgroud)
当我阅读文件时,Pandas错误地猜测我的数据中的所有数字都是 floats。我想强制数据为“int”类型,以便在加载过程中节省内存。我尝试使用选项:dtype=int
,但这发出了一个错误:
ValueError: invalid literal for int() with base 10: 'a'
Run Code Online (Sandbox Code Playgroud)
我想这是因为我的索引和列是字符串。
我知道我可以尝试使用字典来手动指定列的数据类型,但是由于我正在构建一个推荐程序,因此我事先不知道我的文件的列和索引,我想避免重新 -每次加载新文件时创建字典。
如何指定read_csv
方法只在我的表的数据上设置整数类型,而不是索引和列名?
apply()
在数据帧上使用一个函数,如果可以的话,该函数可以进行错误安全强制转换为 int:df = pd.read_csv(url,header=0, sep="\t",index_col=0,encoding="utf-8")
def check_to_int(x):
try:
return int(x)
except:
return x
for i in df.columns:
df[i] = df[i].apply(check_to_int)
Run Code Online (Sandbox Code Playgroud)
如果数据类型有任何进一步的问题(类似于),请发帖。
dtypes
使用这些名称创建一个字典。例如,如果我有数据框:
|user_id |screen_name |isocode |location_name |location_prob
0 |1058941868 |scottspur | | |
1 |1058941921 |Roxy22Bennett | | |
2 |105894357 |MerrynPreece |GB |United Kingdom |0.998043
Run Code Online (Sandbox Code Playgroud)
所以我必须检查“2”行:
a = pd.read_csv('Result_Phong1.csv',header=0, encoding="utf-8", nrows = 3)
a.fillna('', inplace=True)
temp = []
for i in a.loc[2,:].index:
if type(a.loc[2,:][i]) == float:
temp.append(i)
Run Code Online (Sandbox Code Playgroud)
结果是:
Out[46]: [u'location_prob']
Run Code Online (Sandbox Code Playgroud)
然后您可以创建它们的字典以传入 read_csv 函数。
归档时间: |
|
查看次数: |
2247 次 |
最近记录: |