我将行附加到for循环中的pandas DataFrame,但最后数据帧始终为空.我不想将行添加到数组然后调用DataFrame构造函数,因为我的实际for循环处理大量数据.我也尝试过pd.concat
没有成功.任何人都可以强调我缺少什么使附加语句有效吗?这是一个虚拟的例子:
import pandas as pd
import numpy as np
data = pd.DataFrame([])
for i in np.arange(0, 4):
if i % 2 == 0:
data.append(pd.DataFrame({'A': i, 'B': i + 1}, index=[0]), ignore_index=True)
else:
data.append(pd.DataFrame({'A': i}, index=[0]), ignore_index=True)
print data.head()
Empty DataFrame
Columns: []
Index: []
[Finished in 0.676s]
Run Code Online (Sandbox Code Playgroud) 我正在分块读取一个巨大的固定宽度文本文件,并将数据导出为 csv。因为pandas.read_fwf不允许指定数据类型,所以我想知道还有什么其他方法可以强制列为字符串。原因是 pandas 推断某些列是浮动的,即使它们不是浮动的,而且我不希望.0
在列中出现浮动。
使用data[column] = data[column].astype(str)
没有帮助,因为它不会消除小数。将 float64 数据类型的列转换为 int 也不起作用,因为 NA 无法转换。有任何想法吗?
这是我的代码片段:
dat = pd.read_fwf(file_to_read,colspecs=cols,header=None,chunksize=100000,names=header)
#First chunk
data.info()
Int64Index: 100000 entries, 0 to 99999
Columns: 562 entries,
dtypes: float64(405), int64(4), object(153)
memory usage: 429.5+ MB
for column in data.columns:
if data[column].dtype == 'float64':
data[column] = data[column].astype(int)
else:
pass
Run Code Online (Sandbox Code Playgroud)
我可以这样做str().replace('.0','')
,但我想找到一种比遍历列更简单的方法,这需要花费大量时间。
以某种方式对正则表达式在python中的工作方式感到困惑,我希望替换前面带有字母的字符串中的所有逗号,后跟字母或空格.例如:
2015,1674,240/09,PEOPLE V. MICHAEL JORDAN,15,15
2015,2135,602832/09,DOYLE V ICON, LLC,15,15
Run Code Online (Sandbox Code Playgroud)
第一行有效地有6列,而第二行有7列.因此,我试图用空格(NL)替换第二行中的(N,L)之间的逗号,如下所示:
2015,2135,602832/09,DOYLE V ICON LLC,15,15
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所尝试的,但没有成功:
new_text = re.sub(r'([\w],[\s\w|\w])', "", text)
Run Code Online (Sandbox Code Playgroud)
我错的任何想法?
非常感谢帮助!