让我描述一下任务:每列代表船(列名是船名,行是容器)。船名的格式为nn:xxxxxx(ttttttt)。容器以aa-bb-cccccccc/yyyy/xx@ddddddddd.ee的形式表示,其中bb是容器最终目的地的名称。我的任务是计算最终目的地是日本的集装箱数量,因此我必须从集装箱表格中检索bb并对其进行计数。我的想法是创建另一个表,该表将由split函数创建(以“-”作为拆分标题),然后在bb位于单元格中时简单地通过添加+1对其进行计数。这是一些代码:
import pandas as pd
df = pd.read_csv("dane.csv", sep=';')
shape = list(df.shape)
for i in range(0, shape[0]):
for j in range(0, shape[1]):
obj = df.iloc[i, j].split('-')
我得到这样的回溯:
DtypeWarning: Columns (0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,31,32,34,35,36,37,38,39,40,41,43,44,45,46,47,49,51,52,53,54,55,56,57,58) have mixed types. Specify dtype option on import or set low_memory=False.
和
'float' object has no attribute 'split'
我该如何改善?
输入文件,第一列的前5行:
1: Brandenburg (Post-Panamax)
ES-NL-10633096/1938/X1@hkzydbezon.dk/6749
BE-BR-61613986/3551/B1@oqk.bf/39927
PH-SA-39552610/2436/A1@venagi.hr/80578
PA-AE-59814691/4881/X1@zhicvzvksl.cl/25247
有些单元格是空的。
答案 0 :(得分:2)
让我们用extract
然后是value_counts
的正则表达式,您可以过滤结果以获取正确的目的地。
from io import StringIO
intxt = StringIO("""1: Brandenburg (Post-Panamax)
ES-NL-10633096/1938/X1@hkzydbezon.dk/6749
BE-BR-61613986/3551/B1@oqk.bf/39927
PH-SA-39552610/2436/A1@venagi.hr/80578
PA-AE-59814691/4881/X1@zhicvzvksl.cl/25247""")
df = pd.read_csv(intxt, names=['data'])
df['data'].str.extract('^[a-zA-z]{2}-([a-zA-Z]{2})')[0].value_counts()
输出:
AE 1
BR 1
SA 1
NL 1
Name: 0, dtype: int64